为什么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
Run Code Online (Sandbox Code Playgroud)
我对此事有一些想法,但总是很高兴先收到你的来信.
Jon*_*eet 10
字符串文字是固定的 - 自动装帧的双打不是.其他自动装箱可以保证使用缓存对象:
Integer i1 = 1;
Integer i2 = 1;
System.out.println(i1 == i2); // true, guaranteed
Run Code Online (Sandbox Code Playgroud)
请注意,这只是保证从-128到127的值,但可以为更大的值正常工作.有关更多信息,请参阅JLS的5.1.7节.
请注意,对于字符串,它实际上只是因为String常量的实现:
String s1 = new String("a");
String s2 = new String("a");
System.out.println(s1 == s2); // false
Run Code Online (Sandbox Code Playgroud)
...而对于整数装箱,在执行时执行缓存值的重用:
int x = 10;
x -= 9;
Integer i1 = x;
Integer i2 = 1;
System.out.println(i1 == i2); // true, guaranteed
Run Code Online (Sandbox Code Playgroud)