Java 5 でボックス化とアンボックス化が導入されたにもかかわらず、開発者はコード内でプリミティブ型を採用し続けています。ボックス型が提供する追加の利便性を考えると、これは直観に反するように思えるかもしれませんが、プリミティブを使用することにはいくつかの具体的な利点があります。
パフォーマンスに関する考慮事項
Joshua Bloch の「Effective Java」のハイライト単純な計算でlongの代わりにLongを使用することによる潜在的なパフォーマンスへの影響。ボックス化およびボックス化解除操作にはオブジェクトの割り当てと割り当て解除が含まれるため、コードの実行が遅くなる可能性があります。提供された例で示されているように、プリミティブ型を使用すると、実行時間が大幅に短縮されます。
値の平等
プリミティブ型のもう 1 つの利点は、値の等しいというネイティブの概念です。 == 演算子は値を直接比較しますが、ボックス型の .equals() メソッドには追加の手順とオーバーヘッドが必要です。これにより、特にパフォーマンスが重要なシナリオで、より簡潔で効率的なコードが得られます。
キャッシュの影響
Java では、小さな整数値 ([-128; 127] ) は JVM によってキャッシュされます。これは、これらの値に対してまったく同じオブジェクトが返されることを意味し、ボックス型を使用する場合と比較してパフォーマンスを向上させることができます。ただし、この範囲外の値の場合は、新しいオブジェクトが作成され、不必要なオブジェクトのオーバーヘッドが発生する可能性があります。
例: "Biziclop" パズル
.equals( ) ボックス化された整数の場合、混乱を招く可能性があります。次のコードを考えてみましょう:
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 } }
行 (3) は true を返し、行 (4) は false を返すのはなぜですか?答えはキャッシュ メカニズムにあります。値 5 と -5 は JVM によってキャッシュされるため、new Integer(5) の 2 つのインスタンスは同じオブジェクトを参照します。ただし、500 はキャッシュされないため、new Integer(500) の 2 つのインスタンスは別個のオブジェクトになります。一方、Integer.valueOf() は、すべての整数を含む追加のキャッシュを使用し、このキャッシュ内の値 (通常は [-128; 127] の範囲内のすべての整数) に対して同じオブジェクトが返されるようにします。
以上がなぜ Java 開発者はラッパー クラスよりもプリミティブ型を好むのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。