问答详情
源自:3-4 Java中的比较运算符

== 、 != 两边的操作数既可以是数值类型,也可以是引用类型。这句话我不理解

public class Equivalence{
    public static void main(String[] args){
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.println(n1 == n2);
        System.out.println(n1 != n2);
    }
}

这段程序最后输出的结果先是false,然后是true。

这是为什么?很不理解。

提问者:Ricardo慕 2019-11-16 22:00

个回答

  • 慕神8481972
    2019-11-16 22:38:12
    已采纳

    查了下资料. new 出来的对象是存放在堆里面的,== 时比较的是地址;

    也可以直接比较对象的值,比如n1.compareTo(n2) 或n1.intValue() == n2.intValue()

    试了假如直接赋值比较则是相等的, 可能直接赋值是存在栈里面就直接比较值:

    Integer n1 = 47;        

    Integer n2 = 47;

    n1 == n2 //true