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/ …
No.4
- 回答日時:
Java の char は「Unicode における符号化手法の 1つである UTF-16」における「1文字」を表します. つまり
char ch;
と宣言すると, この変数 ch には「UTF-16 で 1文字」の情報を入れることができます. 複数の文字 (あるいは文字列) が必要なら, 既に出ているように配列なり String なりを使ってください.
BMP 以外 (つまり U+10000~U+10FFFF) は「1つにつき 2文字」だけどね.
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
この回答への補足
丁重なご回答まことにありがとうございます。
補助文字をサポートするUnicodeのバージョンにより、16bit以上の情報を持ちえるようになったということですが、それでも、1文字分しか表せないことには変わりありませんか?
No.2
- 回答日時:
コンピュータでは、文字には番号が振ってあります。
コンピュータで文字を扱うときは、その番号を使います。
例えば、 ファイルに「A」という文字を書き込みたかったら、「65」というデータを書き込みます。
どの文字が何番か、は何種類もあって、それが一致しなければ、違う文字になってしまいます(いわゆる文字化け)。ブラウザにある「文字コード」というのは、その番号の振りかたを選ぶものです。
char型は、この番号が1つ入るだけの型です。当然、一文字分のデータしか入りません。
複数使いたいときは、配列やリストにしたり、文字列専用のクラス(String等)を使います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#でstringをポインタとして渡す
-
プログラムによく出てくるst...
-
C++で文字列の右端から特定の文...
-
VB6.0でのバイナリデータの扱い...
-
16進数を2文字ずつ配列に格納し...
-
sprintf関数について教えて下さ...
-
シリアル通信で0x00を送信した...
-
Excelシートを固定長のテキスト...
-
数字の入った配列をファイルへ...
-
K&Rのp.95のgetop(char s[])
-
WSH(VBS)でJSONの文字列を読み...
-
引用符と二重引用符
-
c#で他のアプリの文字入力フォ...
-
構造体→文字列→構造体 をする方法
-
_tcscpy_s(wcscpy_s)の第二引数...
-
C言語のポインタに直接アドレス...
-
CStringからchar*への型変換に...
-
C言語 配列の長さの上限
-
関数から配列を返すには?
-
char*を初期化したいのですが
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムによく出てくるst...
-
C#でstringをポインタとして渡す
-
nullと""、\\0とEOFの違いにつ...
-
WSH(VBS)でJSONの文字列を読み...
-
VB6.0でのバイナリデータの扱い...
-
TCL言語で文字列検索方法を教え...
-
C++で入力した文字列から数字を...
-
シリアル通信で0x00を送信した...
-
16進数を2文字ずつ配列に格納し...
-
char型配列の最大要素数
-
[C++]WCHARの1文字目しか表示で...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
構造体→文字列→構造体 をする方法
-
%dなどの違い
-
数字の入った配列をファイルへ...
-
c#で他のアプリの文字入力フォ...
-
引用符と二重引用符
-
Shift_JIS(16進)を文字に変換す...
-
CSVファイルの「”」について
-
AnsiStringについて
おすすめ情報