黑马程序员技术交流社区
标题:
为什么两个整数不相等
[打印本页]
作者:
ying
时间:
2013-1-13 19:46
标题:
为什么两个整数不相等
本帖最后由 ying 于 2013-1-14 08:20 编辑
Integer x1 = 137;
Integer y1 = 137;
System.out.println(x1 == y1);// 为什么出打印出false
作者:
高会仁
时间:
2013-1-13 20:44
本帖最后由 高会仁 于 2013-1-13 20:47 编辑
Integer是基本数据类型的包装类,Integer x1 = 137;把x1封装成了一个对象,y1为另外一个对象,
两个不同的对象肯定不==啊,当你x1.equals(y1)时,就为true;
而且还使用到了jdk1.5新特性:自动装箱
作者:
McAntilic
时间:
2013-1-13 20:47
楼上正解,当都是大于或者等于127时也就是说数据范围在Byte数据范围内时,这时不构造两个对象,只构造一个对象,所以例如Integer x1 = 127;
Integer y1 = 127;
System.out.println(x1 == y1);// 此时打印true
作者:
杨雯雯
时间:
2013-1-13 21:04
因为你创建了两个对象,两个对象在内存中的引用不同,双等号比的是引用,而equals()方法比的是值
作者:
汪平乐
时间:
2013-1-13 23:01
楼上正解...
Integer x1 = 137;
Integer x2 = 137;
System.out.println(x1==x2);
Integer y1 = 123;
Integer y2 = 123;
System.out.println(y1==y2);
结果是false
true
这个是点杂谈,不知对你有帮助不..
最近学习碰到了一下怪题,String str1="abc" ; string str2="abc" str==str2 这里注意 int,float,boolean,等基本数据类型的包装类型封装了,不能修改栈区内部值 也包括String
举个例子int a=3 ,int b=3 a==3 上面遇到了怪题跟这个很相似,因为字面量a 在栈区分配的内存地址,而字面量b的时候开始在栈区查找地址,所以共同引用的这个地址
所以str1==str2 确实成立,一般在包装类型比较引用类型用equals()方法,一旦修改,就改变指向了就false了
{:soso_e128:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2