Java整数在比较两个整数时返回奇怪的结果?

Sam*_*iya 2 java android

    Integer i1= new Integer(9);
    Integer i2= new Integer(9);

    if(i1==i2){
        System.out.println("true");
    }else{
        System.out.println("false");
    }


    int i3=9;
    int i4=9;

    if(i3==i4){
        System.out.println("true");
    }else{
        System.out.println("false");
    }

    if(i3==i2){
        System.out.println("true");
    }else{
        System.out.println("false");
    }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中首先if-else打印为false,为什么?.但是当第二次返回true而第三次有true时.我认为包装类(如double,boolean,char)不能比较True?

JB *_*zet 7

==用于比较对象的引用时,仅当两个引用指向同一对象时,它才返回true.

在第一种情况下,您有两个不同的对象.

在第二种情况下,您不是比较对象,而是比较基本类型.

在第三种情况下,Integer对象被拆箱到其原始int值以与原始值进行比较,因此比较两个原始值.

您永远不应该使用==比较对象,枚举除外.一直用.equals().


hmj*_*mjd 6

首先,if-else打印为false.为什么?

==检查两个引用是否引用同一个对象,在这种情况下它们不是那样==检查false.你需要使用Integer.equals(),而不是==:

if (i1.equals(i2){
    System.out.println("true");
}else{
    System.out.println("false");
}
Run Code Online (Sandbox Code Playgroud)

第二次回归真实

==用于基元是正确的:int是原始的.

第三个是真的

正如JB Nizet 所指出的那样,它i2是未装箱的,int它使if条件成为两个int基元之间的检查.