黑马程序员技术交流社区
标题:
输出结果并解释为什么
[打印本页]
作者:
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
-------------------------------------------------------------------------
test.jpg
(161.14 KB, 下载次数: 51)
下载附件
2014-5-20 02:04 上传
-------------------------------------------------------------------------
所以注意以下形式的比较:
public static void main(String []args) {
Integer a = 100;
Integer b = 100;
System.out.println(a==b); //true
}
复制代码
但是
public static void main(String []args) {
Integer a = 200;
Integer b = 200;
System.out.println(a==b); //false
}
复制代码
如有地方不对,请楼下随时吐槽。 共同学习~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2