それはJavaで、 `==`と `2 Integer`値を比較するのは安全ですか?

oggioniw:

私は、このJavaコードを持っています:

public class Foo {
    public static void main(String[] args) {
         Integer x = 5;
         Integer y = 5;
         System.out.println(x == y);
    }
}

それは印刷することが保証されtrue、コンソールに?私が意味する、それは(私は何をする必要があるかである)の値によって2つの箱入りの整数を比較または参照のアイデンティティでありますか?

私はこのような箱なし整数にそれらをキャストする場合にも、それは何が違うのだろう

public class Foo {
    public static void main(String[] args) {
         Integer x = 5;
         Integer y = 5;
         System.out.println((int) x == (int) y);
    }
}
チャールズDowbecki:

いいえ、それは比較する正しい方法ではありませんIntegerオブジェクトが。あなたは使うべきInteger.equals()か、Integer.compareTo()方法。

デフォルトでは、JVMは、キャッシュしますInteger[-128、127]の範囲の値を(参照java.lang.Integer.IntegerCache.highプロパティ)が、他の値はキャッシュされません。

Integer x = 5000;
Integer y = 5000;
System.out.println(x == y); // false

アンボクシングintや呼び出しInteger.intValue()が作成されますint安全と比較することができるプリミティブ==演算子を。しかし、アンボクシングaがnullになりますNullPointerException

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=172018&siteId=1