为什么Double变量的比较返回false?

时间:2011-01-28 13:27:05

标签: java string reference

为什么String比较返回true,而Double comparisons返回false?

String s1 = "a";
String s2 = "a";
System.out.println(s1 == s2); // true

Double d1 = 1D;
Double d2 = 1D;
System.out.println(d1 == d2); // false

我对此事有一些想法,但我很高兴先收到你的来信。

1 个答案:

答案 0 :(得分:10)

字符串文字被实习 - 自动装箱双打不是。其他自动装箱可以保证使用缓存对象:

Integer i1 = 1;
Integer i2 = 1;
System.out.println(i1 == i2); // true, guaranteed

请注意,对于-128到127之间的值,这只是保证,但可能也适用于更大的值。有关详细信息,请参阅section 5.1.7 of the JLS

请注意,对于字符串,它实际上只是因为String常量的实现:

String s1 = new String("a");
String s2 = new String("a");
System.out.println(s1 == s2); // false

...而对于整数装箱,缓存值的重用是在执行时执行的:

int x = 10;
x -= 9;
Integer i1 = x;
Integer i2 = 1;
System.out.println(i1 == i2); // true, guaranteed