43

Java char プリミティブ データ型が 1 バイトの C とは異なり、2 バイトである理由はありますか?

ありがとう

4

8 に答える 8

59

Java が最初に設計されたとき、すべての Unicode 文字が 2 バイト (16 ビット) に収まると予想されたため、charそれCharacterに従って設計されました。実際、Unicode 文字には最大 4 バイトが必要になる場合があります。したがって、Java の内部エンコーディングである UTF-16 では、補助文字が 2 つのコード単位を使用する必要があります。Basic Multilingual Plane (最も一般的なもの) の文字は、依然として 1 を使用しますchar。コード単位ごとに Java が使用されます。このSun の記事はそれをよく説明しています。

于 2010-10-18T05:20:03.763 に答える
24

charJava の は UTF-16 でエンコードされているため、文字ごとに最低 16 ビットのストレージが必要です。

于 2010-10-18T05:13:27.713 に答える
12

Java では、文字は2 バイトを使用するUTF-16でエンコードされますが、通常の C 文字列は多かれ少なかれ単なるバイトの集まりです。C が設計されたとき、ASCII (英語の文字セットのみをカバーする) を使用することで十分であると考えられていましたが、Java の設計者はすでに国際化を考慮していました。C 文字列で Unicode を使用する場合は、UTF-8エンコーディングが推奨される方法です。サブセットとして ASCII があり、文字列の末尾として使用される (UTF-16 とは異なり) 0 バイトを使用しないためです。文字列はここでは明示的な長さを持つ複合型であるため、このような文字列の終わりマーカーは Java では必要ありません。

于 2010-10-18T05:28:36.117 に答える
-1

Java は国際化に使用されるため、さまざまな言語で動作し、1 バイト以上のスペースが必要です。そのため、char に 2 バイトのスペースが必要です。たとえば、中国語は 1 バイトの char を変換できません。

于 2015-02-17T17:47:53.737 に答える
-2

私たちが知っているように、cはASCIIをサポートしますが、javaは1-ASCII、2-拡張ASCII、3-ローカル言語文字である3つのものを含むUnicodeをサポートしますASCIIはUnicodeのサブセットです.ASCIIはUnicodeが多国籍言語をサポートするのに対し、英語のみをサポートします。文字は 2 バイトを使用する UTF-16 内でエンコードされます。すべての理由から、Unicode は ASCII の拡張バージョンであるため、8 ビットではなく 16 ビットを使用します。

于 2016-02-22T04:02:42.347 に答える