关于“==”比较疑问
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的拆箱装箱
------解决方案--------------------正解
------解决方案--------------------自动拆箱装箱
------解决方案--------------------jdk
1.5后自动拆装箱
------解决方案--------------------
通过断点可以发现 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 楼正解~
骗人
------解决方案--------------------自动拆箱..
------解决方案--------------------
你用 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);