黑马程序员技术交流社区

标题: 输出结果并解释为什么 [打印本页]

作者: alax    时间: 2014-5-19 06:53
标题: 输出结果并解释为什么
Integer a=new Integer(127);
Integerb=new Integer(127);
System.out.print(a==b);
System.out.print(a.equals(b);
Integer a=127;
Integer b=127;
System.out.print(a==b);
System.out.print(a.equals(b);

作者: zhrnghgwsws    时间: 2014-5-19 11:48
false:两个new 的对象的引用地址不同
true:内容相同。equals比较的是内容。
true:在一个字节之内的整数,应该是就像字符串一样,存在于常量池中,是共享数据。所以,a和b指向了同一个对象地址。
true:内容相同。
作者: Sevenette    时间: 2014-5-19 23:21
楼上结果都是对的~

==是判断两个对象的地址值是否相同。
Integer类中的equals()方法是复写了Object中的equals()方法,会判断两个对象的内容是否相同。

Integer a=127; 涉及到自动装箱,但如果这个整数在-127~127之间时,系统不会每次都new一个新的Integer对象,而是取值相同的对象只new一次,所以a和b指向同一个对象,==的结果也就是true了~
作者: 波涛    时间: 2014-5-20 01:01
本帖最后由 波涛 于 2014-5-20 02:04 编辑

Integer a=new Integer(127); //Integer整型包装类,当普通类对待即可,栈中a存放Integer在堆中的地址,指向堆空间开辟的一个区域, 存放了127
Integer b=new Integer(127);//同样栈里的b指向堆内存中新区域也存放一个127
System.out.print(a==b);// “==”是判断内存地址是否相等; a、b指向堆中的地址显然不同所以,故为false
System.out.print(a.equals(b));//equals() 是判断两个对象的值是否相等,而不管它们的内存地址是否相等, 由于其值皆为127,故为true
-------------------------------------------------------------------------

-------------------------------------------------------------------------
所以注意以下形式的比较:





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2