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。
这是为什么?很不理解。
查了下资料. new 出来的对象是存放在堆里面的,== 时比较的是地址;
也可以直接比较对象的值,比如n1.compareTo(n2) 或n1.intValue() == n2.intValue()
试了假如直接赋值比较则是相等的, 可能直接赋值是存在栈里面就直接比较值:
Integer n1 =
47
;
Integer n2 =
47
;
n1 == n2 //true