• ベストアンサー

javaについて、char型に関する質問

私プログラミングまったくの初心者であることを最初に断っておきます。 よって、なるべく噛み砕いた解説をお願いします。 javaの参考書で、「char型は文字1つ分の情報にあたります」 と書いてありました。 これはどういうことでしょうか? char型で宣言された変数は文字1つ分の情報しか入れられないということでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Kensyusei
  • ベストアンサー率30% (25/81)
回答No.5

まず、No.3の回答に誤りがあったことをお詫び申し上げます。 No.3では「char型は16bit固定とは限らない」という旨の回答を致しましたが、「1文字は16bit固定とは限らない」というのが正解です。 Javaのchar型は16bit固定であり、16bit分の情報しか入りません。 ただ、Unicodeの1文字を表すために、char型の配列を(Stringクラス等を使う場合は内部的に)使用することがあります。

参考URL:
http://java.sun.com/developer/technicalArticles/Intl/Supplementary/index_ja.html

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

Java の char は「Unicode における符号化手法の 1つである UTF-16」における「1文字」を表します. つまり char ch; と宣言すると, この変数 ch には「UTF-16 で 1文字」の情報を入れることができます. 複数の文字 (あるいは文字列) が必要なら, 既に出ているように配列なり String なりを使ってください. BMP 以外 (つまり U+10000~U+10FFFF) は「1つにつき 2文字」だけどね.

  • Kensyusei
  • ベストアンサー率30% (25/81)
回答No.3

まず、結論から申し上げるとJavaのchar型には「Unicode」1文字分の情報が入ります。 Javaでは全ての文字をUnicodeで表現します。 Javaのchar型に入る情報量は、Unicodeと密接に関係しています。 そこで、Unicodeについてざっくりと説明致します。 昔、符号の組み合わせを文字に読み替える方法が発明されました。(モールス符号はこの方法のひとつです) 符号(モールス符号では単点"・"と長点"-"の2種類<コンピュータでいうと1bit>)の組み合わせを集めたものを「文字集合」と呼び、 文字集合を文字に読み替える方法を「符号化方式」と呼びます。(欧文モールス符号で"・-"は"A"を表現するが、符号化方式の異なる和文モールス符号では"・-"が"イ"を表現する) そして、文字集合と符号化方式の組み合わせを「文字コード」と呼びます。 Unicodeは、コンピュータ上で多言語の文字を取り扱うために1980年代に提唱された文字コードです。 当初、Unicodeは16bitの文字集合を持つ文字コードとして設計されました。 さて、Javaの基本データ型 char は、Unicodeの設計に基づいて、任意の文字を保持できる単純なデータ型として設定されました。 ではchar型の変数にはUnicode 1文字分、つまり16bitの情報が入る、というわけではありません。 その理由は、Unicodeの文字集合16bit(つまり65536文字)では世界中の文字を表現できないことが判明し、この問題を解消するためUnicodeがいくつものバージョンを産み出したからです。 Javaでは補助文字(16bitで表現できない文字)をサポートするUnicodeのバージョンを採用しました(J2SE バージョン 5.0 では Unicode 4.0をサポートしている)。 これにより、Javaのchar型は16bitを超える情報を持ち得るようになったのです。 つまり、wantantonさんの読んだJavaの参考書にあるように「char型は文字1つ分の情報にあた」るわけです。

参考URL:
http://ja.wikipedia.org/wiki/Unicode
wantanton
質問者

補足

丁重なご回答まことにありがとうございます。 補助文字をサポートするUnicodeのバージョンにより、16bit以上の情報を持ちえるようになったということですが、それでも、1文字分しか表せないことには変わりありませんか?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

コンピュータでは、文字には番号が振ってあります。 コンピュータで文字を扱うときは、その番号を使います。 例えば、 ファイルに「A」という文字を書き込みたかったら、「65」というデータを書き込みます。 どの文字が何番か、は何種類もあって、それが一致しなければ、違う文字になってしまいます(いわゆる文字化け)。ブラウザにある「文字コード」というのは、その番号の振りかたを選ぶものです。 char型は、この番号が1つ入るだけの型です。当然、一文字分のデータしか入りません。 複数使いたいときは、配列やリストにしたり、文字列専用のクラス(String等)を使います。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

その通りです。 文字列を情報として保持したいなchar型の配列かString、StringBuffer等を使います。