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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李敬 中级黑马   /  2012-8-11 05:22  /  1138 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                int i = 123;
                Integer i1 = 123;
                Integer i2 = 123;
                Integer i3 = new Integer(123);
                Integer i4 = new Integer(123);
                System.out.println(i1 == i2);//true
                System.out.println(i3 == i4);//false
                System.out.println(i2 == i4);//false
                System.out.println(i == i2);//true
                System.out.println(i == i4);//true
这些东西每次看到都犯困,好不容易死记下来,下次再看到还是迷糊,哪位同学能简短的总结下这里面的知识点,他们的关系与区别?越短越好,一看就明白,不容易忘得.

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
System.out.println(i1 == i2);//true  因为Integer 在byte类型数据范围实现了常量池技术,所以自动加包后,-128到127范围内对应的是同一个对象。
System.out.println(i3 == i4);//false 因为使用了new操作,产生了新的对象,所以为false。
System.out.println(i2 == i4);//false 同样也是因为new操作产生新的对象,导致两者对应的不是同意个对象,所以为false。
System.out.println(i == i2);//true  Integer有自动加包和解包的功能,当与基本类型数据比较时,会自动解包,此时相当于两个数字的比较,所以为true。
System.out.println(i == i4);//true  原因同第四个。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

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