比较两个Integer Wrapper类

Ish*_*dya 0 java

为什么这个程序在第一个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)

And*_*ner 5

使用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++,因此第二行打印"真".