日期:2014-05-20  浏览次数:20855 次

关于“==”比较疑问
int e = 1;
Integer f = new Integer(1);
System.out.println(e==f);

为什么输出的是true?
“==”比较符在基本类型比较的是具体值,在引用类型比较的是引用值,e的值是1,f是引用,为什么能是相等的呢?  难道f的引用值也是1?


想不明白,请求解答
------解决方案--------------------
http://blog.csdn.net/ying_24ying/article/details/7068174
貌似可以说明一些问题
概念上的事情我也不清除
------解决方案--------------------
这个问题我也纠结很久。但我的猜想是当对象与基本数据类型进行比较的时候,应该是将Integer转换为int类型之后再进行比较。
也符合数据类型一一致的要求。
这也是我个人觉得,仅供参考。
------解决方案--------------------
Integer和栈中基本类型int逻辑运算的时候会自动转型,转int类型,两个Integer==Integer就不会相等了。
------解决方案--------------------
这是拆包的特性。
------解决方案--------------------
Integer的数据,为了和int数据进行比较,进行了拆包,所以才是true。
如果一个基本数据类型要跟对象进行比较,结果只能是编译出错。
------解决方案--------------------
楼主可以去了解一下 java 拆包的理论知识。。
------解决方案--------------------
integer自动将-128~127只将的整数转为int类型
------解决方案--------------------
你用 128试就不是 true 了,#7 楼正解~

------解决方案--------------------
JDK5中的新功能吧,自动装箱,自动拆箱!
------解决方案--------------------
Java的拆箱装箱
------解决方案--------------------
引用:
integer自动将-128~127只将的整数转为int类型
正解
------解决方案--------------------
自动拆箱装箱
------解决方案--------------------
jdk
1.5后自动拆装箱
------解决方案--------------------
引用:
Quote: 引用:

你用 128试就不是 true 了,#7 楼正解~


引用:
你用 128试就不是 true 了,#7 楼正解~
用128试了,也是true啊


通过断点可以发现 Integer的intValue方法被调用
证明Integer对象拆箱成int型与数字比较

=========================================================
-128~127的Integer不是自动拆成int型
看源码就知道Integer 里面有个叫 IntegerCache的类
缓存了-128~127的Integer对象,自动装包时调用Integer.valueOf(int i)
所以指向的Integer是一样的,所以 == 才会true
手动 new Integer(i) 就会做成不等了



------解决方案--------------------
Integer的数据,为了和int数据进行比较,进行了拆包,所以才是true。
如果一个基本数据类型要跟对象进行比较,结果只能是编译出错。
------解决方案--------------------
引用:
integer自动将-128~127只将的整数转为int类型

我试过了也是true
------解决方案--------------------
说白了就是所谓的自动装箱和自动拆箱的问题了。因为e 和 f 类型不一样。

System.out.println(new Integer(1)==new Integer(1));的结果就是false。俩对象,没有重载“==”,肯定不一样了。

------解决方案--------------------
引用:
integer自动将-128~127只将的整数转为int类型


引用:
你用 128试就不是 true 了,#7 楼正解~

骗人
------解决方案--------------------
自动拆箱..
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

你用 128试就不是 true 了,#7 楼正解~


引用:
你用 128试就不是 true 了,#7 楼正解~
用128试了,也是true啊


通过断点可以发现 Integer的intValue方法被调用
证明Integer对象拆箱成int型与数字比较

=========================================================
-128~127的Integer不是自动拆成int型
看源码就知道Integer 里面有个叫 IntegerCache的类
缓存了-128~127的Integer对象,自动装包时调用Integer.valueOf(int i)
所以指向的Integer是一样的,所以 == 才会true
手动 new Integer(i) 就会做成不等了


手动 new Integer(i) 就会做成不等了???不太明白,能给段事例代码么,谢谢


Integer a = 121;
Integer b = 121;
Integer c = new Integer(121);

System.out.println(a == b);
System.out.println(a == c);


int   d = 121;
Float e = 121.0f;
System.out.println(d == e);