我有一个关于比较字符串和整数对象的问题...混淆字符串与整数
a。比较字符串引用:
String string1 = "Hi";
System.out.printf("%s \n", string1);
String originalString = string1;
System.out.printf("%-9s %-9s %b \n", string1, originalString, originalString == string1);
System.out.println();
string1 += " there";
originalString += " there";
System.out.printf("%-9s %-9s %b \n", string1, originalString, originalString.equals(string1));
System.out.printf("%-9s %-9s %b \n", string1, originalString, originalString == string1);
产生的输出:
Hi
Hi Hi true
Hi there Hi there true
Hi there Hi there false
这里,最后一行比较地址和可以预料的作假。 目前为止;)
b。比较整数引用:
Integer integer1 = 10;
System.out.printf("%d \n", integer1);
Integer originalInteger = integer1;
System.out.printf("%d %d %b \n", integer1, originalInteger, originalInteger == integer1);
System.out.println();
integer1++;
originalInteger++;
System.out.printf("%d %d %b \n", integer1, originalInteger, originalInteger == integer1);
产生的输出:
10
10 10 true
11 11 true
到最后一行打印出来的时候,这两个“整数1”和“originalInteger”被引用完全不同的对象......尽管如此
originalInteger == integer1 --> true ???
这是否意味着不是对象的地址,而是对象的内容进行比较? 换句话说,是否因为使用类型包装器,在比较之前这些值始终是“拆箱”的?
因此,恢复:
originalString == string1 --> false
originalInteger == integer1 --> true
我不明白为什么originalInteger ==整数1 - >真
谢谢
有关此的以前的问题包括http://stackoverflow.com/q/3130311/978917,http://stackoverflow.com/q/1700081/978917,http://stackoverflow.com/q/15024933/978917,和其他许多人。 – ruakh