请教一个比较运算符的问题

doxsoft 2007-10-24 05:58:38
比如==,书上说可以用来做基本类型数值之间的比较,也可以用来做对象变量之间的比较。可是请看如下代码:

String s = "s";
Integer i = new Integer(1);
if (s == i) {
}

编译报Incompatible operand types String and Integer的错。

我想知道的是:当比较运算符运用来做对象变量之间的比较的时候,都有那些规则。

谢谢了!
...全文
73 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
manbaum 2007-10-24
  • 打赏
  • 举报
回复
==比较的条件可以这么总结:

1、对于primary类型,取值比较。
1.1、同类型的,直接比较。
1.2、不同类型的,自动将低精度类型cast成高精度类型,然后比较。
2、对于引用类型的
2.1、同类型的,比较两个引用是否引用了同一个对象实例。
2.2、不同类型的
2.2.1 ==号左侧是右侧的超类,比较是否两个引用是否引用了同一个对象实例。
2.2.2 否则,抛异常。
doxsoft 2007-10-24
  • 打赏
  • 举报
回复
String 和 Integer 虽同是Object的子类,可是彼此不能相互cast,故不能放在一起比较。而若把Object 和 Integer 型的变量就可以进行比较操作(Integer可以向上cast成Object),所以楼上 intergameover 的说法成立。
doxsoft 2007-10-24
  • 打赏
  • 举报
回复
我的理解:

==运算符两侧的对象变量需遵循这样的规则,即:其中一方必须能cast成另外一方的类型。

请各位指正,谢谢!
intergameover 2007-10-24
  • 打赏
  • 举报
回复
if ((Object)s == i) { //先把一个cast成Object
}
manbaum 2007-10-24
  • 打赏
  • 举报
回复
如果你想这样比,那你需要用(Object)s == (Object)i这个形式去比较。
doxsoft 2007-10-24
  • 打赏
  • 举报
回复
他们的实例都可以cast成java.lang.Object类型的对象。
doxsoft 2007-10-24
  • 打赏
  • 举报
回复
to:manbaum

String 和 Integer都是java.lang.Object的子类。
约翰羊 2007-10-24
  • 打赏
  • 举报
回复
呵呵.
manbaum 2007-10-24
  • 打赏
  • 举报
回复
语法错误!说明楼主对java的基本语法还不熟悉,看看java基本的教科书吧。

==比较的双方应该是同一类型的对象,至少是可以cast成同一类型的对象。如果非要拿一个橘子同一台电脑做比较相等,你觉得有意义么?

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧