int与整数比较Java

int与整数比较Java,java,Java,输出 class datatype1 { public static void main(String args[]) { int i1 = 1; Integer i2 = 1; Integer i3 = new Integer(1); System.out.println("i1 == i2"+(i1==i2)); System.out.println("i1 == i3"+(i1==i3)); System.out.prin

输出

class datatype1
{

    public static void main(String args[])
    {
    int i1 = 1;
    Integer i2 = 1;
    Integer i3 = new Integer(1);

    System.out.println("i1 == i2"+(i1==i2));
    System.out.println("i1 == i3"+(i1==i3));
    System.out.println("i2 == i3"+(i2==i3));
}

}
有人能解释为什么我在比较i2和i3时会出错吗

i1 == i2true
i1 == i3true
i2 == i3false
在中生成结果,并执行定期的int比较。(见附件)

结果是。记住,
i2
i3
是两个不同的对象。(见附件)

这就是自动装箱。您正在将int(基元类型)转换为相应的包装器

Integer i2 = 1;
这里不需要自动装箱,因为您直接创建整数对象

现在在

 Integer i3 = new Integer(1);
i2和i3会自动取消绑定,并进行常规的int比较,这就是为什么会得到true

现在考虑

i1 == i2
i1 == i3
这里,i2和i3都是要比较的整数对象。由于两者都是不同的对象(因为您使用了新操作符),它显然会给出false。注意==运算符检查两个引用是否指向同一对象。如果不重写Infact.equals()方法,则执行相同的操作

这等于说

i2 == i3

这会再次给你错误的答案

你在比较指针,而不是值…引用,而不是指针。为什么这样的问题会被高估???@braindead为什么不应该呢?别忘了提到
Integer。valueOf(1)
会导致
true
,因为Java将使用整数cache@durron597没错,伙计,复制粘贴错误你的第二行代码与第一行代码相同,对此表示歉意,但不是否决投票,任何人都可以编辑它。我不是否决投票人,我只是说乍一看是错的。这对我来说太小了,无法编辑!“如果不重写Infact.equals()方法,则执行相同的操作。”不确定这里的意思。如果使用i2.equals(i3)测试最后一段代码;这是真的。因此,我不同意它做同样的事情……我同意Mark的断言,我测试了这一行,并且.equals()为我返回了true,没有任何形式的重写。
i1 == i2
i1 == i3
i2 == i3
    Integer i2 = new Integer(1);
    Integer i3 = new Integer(1);
    System.out.println("i2 == i3 "+(i2==i3));