考虑以下代码段:
int i = 99999999;
byte b = 99;
short s = 9999;
Integer ii = Integer.valueOf(9); // should be within cache
System.out.println(new Integer(i) == i); // "true"
System.out.println(new Integer(b) == b); // "true"
System.out.println(new Integer(s) == s); // "true"
System.out.println(new Integer(ii) == ii); // "false"
很明显,为什么最后一行总是会打印"false"
:我们正在使用==
引用标识比较,并且new
对象永远不会与==
已经存在的对象相关。
问题是关于前 3 行:这些比较是否保证在原语int
上,Integer
自动拆箱?是否存在原语会被自动装箱并执行参考身份比较的情况?(那将是false
!)