为什么这个程序在第一个print语句中打印为false而在print语句中为true.i和i1是两个不同的对象,因此第一个语句必须打印"true",这是预期的,但第二个print语句打印"false",这会产生混淆.
public static void main(String[] args) {
Integer i = new Integer(10);
Integer i1 = new Integer(10);
System.out.println(i == i1); //printing false
i++;
i1++;
System.out.println(i == i1);//printing true
}
Run Code Online (Sandbox Code Playgroud)
使用new关键字始终会创建两个不同的实例.所以以下情况总是如此:
new Integer(10) != new Integer(10)
Run Code Online (Sandbox Code Playgroud)
因此第一行打印"假".
然后:
i++;
Run Code Online (Sandbox Code Playgroud)
隐藏拆箱和装箱.它相当于:
i = Integer.valueOf(i.intValue() + 1);
Run Code Online (Sandbox Code Playgroud)
正如所描述的Javadoc,Integer.valueOf从-128至127(至少)缓存:你找回的缓存实例Integer.valueOf(11)两个i++和i1++,因此第二行打印"真".