佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1400|回复: 6

一个 很 奇怪的 LOGIC

[复制链接]
发表于 2-11-2009 01:25 PM | 显示全部楼层 |阅读模式
Integer a = new Integer(1024);
Integer b = new Integer(1024);
boolean test = a < b || a == b || a > b;

为什么 test 会 return false ?

这个是 JAVA
回复

使用道具 举报


ADVERTISEMENT

发表于 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
回复

使用道具 举报

Follow Us
发表于 9-11-2009 09:46 PM | 显示全部楼层
话说简单, 你在compare object 不是 compare value
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 2-12-2025 10:38 AM , Processed in 0.122048 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表