A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ying 中级黑马   /  2013-1-13 19:46  /  1649 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ying 于 2013-1-14 08:20 编辑

Integer x1 = 137;
  Integer y1 = 137;
  System.out.println(x1 == y1);// 为什么出打印出false

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 高会仁 于 2013-1-13 20:47 编辑

Integer是基本数据类型的包装类,Integer x1 = 137;把x1封装成了一个对象,y1为另外一个对象,
两个不同的对象肯定不==啊,当你x1.equals(y1)时,就为true;
而且还使用到了jdk1.5新特性:自动装箱

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
楼上正解,当都是大于或者等于127时也就是说数据范围在Byte数据范围内时,这时不构造两个对象,只构造一个对象,所以例如Integer x1 = 127;
  Integer y1 = 127;
  System.out.println(x1 == y1);// 此时打印true

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
因为你创建了两个对象,两个对象在内存中的引用不同,双等号比的是引用,而equals()方法比的是值

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
楼上正解...
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:}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马