黑马程序员技术交流社区

标题: 为什么两个整数不相等 [打印本页]

作者: 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