ホームページ >Java >&#&チュートリアル >ラッパークラスが存在するにもかかわらず、Java プログラマーはなぜプリミティブ型を好むのでしょうか?

ラッパークラスが存在するにもかかわらず、Java プログラマーはなぜプリミティブ型を好むのでしょうか?

DDD
DDDオリジナル
2024-11-25 13:15:12458ブラウズ

Why Do Java Programmers Favor Primitive Types Despite the Existence of Wrapper Classes?

なぜプログラマは 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。