9
Integer integer1 = 127;
Integer integer2 = 127;
System.out.println(integer1 == integer2);//true

integer1 = 128;
integer2 = 128;
System.out.println(integer1 == integer2);//false

の範囲で==(ある場合)を返すことがわかりましたが-128 - 127、なぜそのような仕様があるのですか?

4

2 に答える 2

28

このコードのためにInteger.valueOf(int)

public static Integer valueOf(int i) {
    if(i >= -128 && i <= IntegerCache.high)
        return IntegerCache.cache[i + 128];
    else
        return new Integer(i);
}

説明:

Integer integer1 = 127はのショートカットでInteger integer1 = Integer.valueOf(127)あり、-128〜127(両端を含む)の値の場合、整数はキャッシュに入れられて複数回返されますが、数値が大きい場合と小さい場合は毎回新しい整数が生成されます。

于 2011-04-07T13:34:14.667 に答える
3

==まったく同じオブジェクトの場合はtrueを返します。その範囲内のJava'intern'番号のボックス化された整数。したがって、そのような番号のボックス化されたバージョンは、まったく同じオブジェクトになります。

比較でこの影響を回避するには、.equals()を使用します

System.out.println(integer1.equals(integer2));
于 2011-04-07T13:35:39.930 に答える