なぜプログラマは Java でプリミティブ型をまだ使用しているのですか?
Java 5 でボックス化とアンボックス化が導入されたにもかかわらず、多くの開発者は引き続きプリミティブ型を使用しています。 int のようなプリミティブ型は、java.lang.Integer などの対応するオブジェクト型よりも優れています。この実践では、オブジェクト型によって提供される利便性が向上しているにもかかわらず、なぜこのようなことが起こるのかという疑問が生じます。
Joshua Bloch の「効果的な Java」 (項目 5: 「不要なオブジェクトの作成を避ける」) で概説されているように、プリミティブの使用はパフォーマンスに大きなメリットをもたらす可能性があります。彼のコード例では、Long オブジェクトを使用した Long の合計には 43 秒かかりますが、プリミティブを使用するとプロセスが 6.8 秒に短縮されます。
プリミティブの使用に寄与するもう 1 つの要因は、オブジェクト型のネイティブ値の同等性が欠如していることです。等しいかどうかを判断するには、プリミティブで使用できる効率的な == 演算子とは異なり、冗長なquals() メソッドを使用する必要があります。
次のコード スニペットを考えてみましょう。
class Biziclop { public static void main(String[] args) { System.out.println(new Integer(5) == new Integer(5)); // false System.out.println(new Integer(500) == new Integer(500)); // false System.out.println(Integer.valueOf(5) == Integer.valueOf(5)); // true System.out.println(Integer.valueOf(500) == Integer.valueOf(500)); // false } }
出力では矛盾が明らかになります。 new Integer() と Integer.valueOf() の値が等しい。 Java 言語仕様 (JLS) では少なくとも 256 個の整数フライウェイト ([-128; 127]) のキャッシュが必要ですが、JVM 実装者はこの範囲を拡張することができます。これは、特定の値が一部のシステムではキャッシュされ、他のシステムではキャッシュされず、予期しない動作が発生する可能性があることを意味します。
以上がラッパークラスが存在するにもかかわらず、Java プログラマーはなぜプリミティブ型を好むのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。