|
查看: 1407|回复: 6
|
一个 很 奇怪的 LOGIC
[复制链接]
|
|
|
Integer a = new Integer(1024);
Integer b = new Integer(1024);
boolean test = a < b || a == b || a > b;
为什么 test 会 return false ?
这个是 JAVA |
|
|
|
|
|
|
|
|
|
|
发表于 2-11-2009 01:35 PM
|
显示全部楼层
boolean test = a < b || a == b || a > b;
三個都是false
boolean test = a < b || a.equals(b) || a > b;
a.equals(b)是 true  |
|
|
|
|
|
|
|
|
|
|
发表于 2-11-2009 03:54 PM
|
显示全部楼层
|
Value用==,Object用equals,Integer是Object。 |
|
|
|
|
|
|
|
|
|
|
发表于 2-11-2009 11:23 PM
|
显示全部楼层
回复 1# 兔仙人 的帖子
试试看
int a = xxxx;
int b = xxxx; |
|
|
|
|
|
|
|
|
|
|
发表于 3-11-2009 01:14 AM
|
显示全部楼层
Compile的过吗?
operator < cannot be applied to java.lang.Integer,java.lang.Integer
boolean test = a < b || a == b || a > b; |
|
|
|
|
|
|
|
|
|
|
发表于 3-11-2009 12:53 PM
|
显示全部楼层
Integer a = new Integer(1024);
Integer b = new Integer(1024);
boolean test = a < b || a == b || a > b;
版本1.4或以下不能compile
版本1.5或以上是false
不管新旧版==比较的都是Object是不是一样(这里a==b是false)
因为java 1.5加了一个叫做自动装箱自动拆箱的功能,就是在需要int的时候自动把Integer变成int,或反过来在需要Integer的时候自动把int变成Integer。
比如说1.4里面
map.put(new Integer(1), 1);
1.5里面可以直接
map.put(1, 1); (因为自动把1装箱进Integer里面)
也就是说a > b, a < b其实做了4次自动拆箱,变成int 1024跟int 1024比较所以两个都是false
而a==b本身不需要转换也有他的意义在,也就是比较是不是同一个object
如果要比较两个Integer的value,可以用a.equals(b),或者强制自动拆箱,方法是 (int) a == b |
|
|
|
|
|
|
|
|
|
|
发表于 9-11-2009 09:46 PM
|
显示全部楼层
|
话说简单, 你在compare object 不是 compare value |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|