Java charプリミティブデータ型が1バイトであるCとは異なり2バイトである理由はありますか?
ありがとう
Javaが最初に設計されたとき、Unicode文字は2バイト(16ビット)に収まると予想されていたため、char
およびCharacter
はそれに応じて設計されました。実際、Unicode文字は最大4バイトを必要とする可能性があります。したがって、内部のJavaエンコーディングであるUTF-16は、2つのコード単位を使用する補助文字を必要とします。基本的な多言語プレーンの文字( A Java char
が各コード単位に使用されます。これは Sunの記事 でよく説明されています。).
char
in JavaはUTF-16でエンコードされているため、各文字に最低16ビットのストレージが必要です。
Javaでは、文字は UTF-16 でエンコードされ、2バイトを使用しますが、通常のC文字列は多かれ少なかれ単なるバイトの集まりです。 Cが設計されたとき、 [〜#〜] ascii [〜#〜] (英語の文字セットのみをカバーする)を使用することで十分であると見なされましたが、 Javaデザイナーはすでに国際化を考慮しています。 C文字列でUnicodeを使用する場合、サブセットとしてASCIIがあるため、 UTF-8 エンコーディングが推奨されます。 Cでは文字列の終わりマーカーとして使用される(UTF-16とは異なり)0バイトを使用しません。このような文字列の終わりマーカーは、Javaでは文字列として必要ありません。ここでは、明示的な長さを持つ複合型です。
Cのような以前の言語では[〜#〜] ascii [〜#〜]表記法が使用されます。また、範囲は127です。127の場合一意の記号および言語文字です。
Javaには"INTERNATIONALIZATION"と呼ばれる機能が付属していますが、これがHuman Readable文字(地域記号を含む)のすべてです)も追加され、範囲も拡大されます。したがって、必要なメモリが増えます。これらのすべての記号を統合するシステムは"Standard Unicode System"であり、これにより統一には、Javaで追加のバイトが必要です。
最初のバイトはそのままで、ASCII文字の範囲はC、C++のように127ですが、統一文字が追加されます。
したがって、Javaのcharは16ビット、Cのcharは8ビットです。
Charデータ型は、単一の16ビットUnicode文字です。 '\ u0000'(または0)の最小値と '\ uffff'(または65,535を含む)の最大値があります。