Java char プリミティブ データ型が 1 バイトの C とは異なり、2 バイトである理由はありますか?
ありがとう
Java が最初に設計されたとき、すべての Unicode 文字が 2 バイト (16 ビット) に収まると予想されたため、char
それCharacter
に従って設計されました。実際、Unicode 文字には最大 4 バイトが必要になる場合があります。したがって、Java の内部エンコーディングである UTF-16 では、補助文字が 2 つのコード単位を使用する必要があります。Basic Multilingual Plane (最も一般的なもの) の文字は、依然として 1 を使用しますchar
。コード単位ごとに Java が使用されます。このSun の記事はそれをよく説明しています。
char
Java の は UTF-16 でエンコードされているため、文字ごとに最低 16 ビットのストレージが必要です。
Java では、文字は2 バイトを使用するUTF-16でエンコードされますが、通常の C 文字列は多かれ少なかれ単なるバイトの集まりです。C が設計されたとき、ASCII (英語の文字セットのみをカバーする) を使用することで十分であると考えられていましたが、Java の設計者はすでに国際化を考慮していました。C 文字列で Unicode を使用する場合は、UTF-8エンコーディングが推奨される方法です。サブセットとして ASCII があり、文字列の末尾として使用される (UTF-16 とは異なり) 0 バイトを使用しないためです。文字列はここでは明示的な長さを持つ複合型であるため、このような文字列の終わりマーカーは Java では必要ありません。
Java は国際化に使用されるため、さまざまな言語で動作し、1 バイト以上のスペースが必要です。そのため、char に 2 バイトのスペースが必要です。たとえば、中国語は 1 バイトの char を変換できません。
私たちが知っているように、cはASCIIをサポートしますが、javaは1-ASCII、2-拡張ASCII、3-ローカル言語文字である3つのものを含むUnicodeをサポートしますASCIIはUnicodeのサブセットです.ASCIIはUnicodeが多国籍言語をサポートするのに対し、英語のみをサポートします。文字は 2 バイトを使用する UTF-16 内でエンコードされます。すべての理由から、Unicode は ASCII の拡張バージョンであるため、8 ビットではなく 16 ビットを使用します。