web-dev-qa-db-ja.com

文字列のプリミティブ型がないのはなぜですか?

Javaには、他のほとんどのデータ型と同じように、Stringのプリミティブ型がないのはなぜですか?

34
user241924

文字列はオブジェクトであり、プリミティブ型ではなく、単なる文字の配列です。プリミティブ型がJavaに存在する理由)は興味深いものです James Goslingインタビュー からの抜粋:

Bill Venners:Javaにプリミティブ型があるのはなぜですか?なぜすべてが単なるオブジェクトではなかったのですか?

James Gosling:完全に効率的なもの。 intとそれがすべてオブジェクトであるシステムを構築した人には、さまざまな種類があります。これにはさまざまな方法があり、それらにはすべてかなり深刻な問題があります。それらのいくつかは、すべてにメモリを割り当てるため、単に遅いです。それらの一部は、オブジェクトである場合とそうでない場合があるオブジェクトを実行しようとします(標準のLISPシステムの場合とは異なります)。それは一種の作品ですが、それは奇妙です。

プリミティブとオブジェクトが存在するように作成するだけで、それらはまったく異なります。あなたは多くの問題を解決します。

要するに、プリミティブ型は効率上の理由から存在しています。

55
Jon

int、char、float、doubleなどはすべてメモリ内で固定長です。例えばintは4バイト、つまり32ビットです。

しかし、文字列は異なる長さを持つことができ、それは実際には文字の配列です。

17
Yin Zhu

ほとんどのプログラミング言語は、実際には文字の配列であるため、文字列プリミティブを考慮しません。プリミティブ型はほとんど常に固定サイズです。

Stringは組み込みであるため、「プリミティブ」であると考える人もいるでしょう。ただし、複合型ではなく基本型であるという意味では、プリミティブではありません。文字列は文字の配列なので、複合型です。

6
Eric Mickelsen