web-dev-qa-db-ja.com

Java charプリミティブが2バイトのメモリを消費するのはなぜですか?

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

ありがとう

32
realnumber

Javaが最初に設計されたとき、Unicode文字は2バイト(16ビット)に収まると予想されていたため、charおよびCharacterはそれに応じて設計されました。実際、Unicode文字は最大4バイトを必要とする可能性があります。したがって、内部のJavaエンコーディングであるUTF-16は、2つのコード単位を使用する補助文字を必要とします。基本的な多言語プレーンの文字( A Java charが各コード単位に使用されます。これは Sunの記事 でよく説明されています。).

49

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

20
Vijay Mathew

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

9
DarkDust

Cのような以前の言語では[〜#〜] ascii [〜#〜]表記法が使用されます。また、範囲は127です。127の場合一意の記号および言語文字です。

Javaには"INTERNATIONALIZATION"と呼ばれる機能が付属していますが、これがHuman Readable文字(地域記号を含む)のすべてです)も追加され、範囲も拡大されます。したがって、必要なメモリが増えます。これらのすべての記号を統合するシステムは"Standard Unicode System"であり、これにより統一には、Javaで追加のバイトが必要です。

最初のバイトはそのままで、ASCII文字の範囲はC、C++のように127ですが、統一文字が追加されます。

したがって、Javaのcharは16ビット、Cのcharは8ビットです。

4
tilak

Java™チュートリアル

Charデータ型は、単一の16ビットUnicode文字です。 '\ u0000'(または0)の最小値と '\ uffff'(または65,535を含む)の最大値があります。

0
Zeyu