(没准你也有此疑惑)对 "equals"的疑问?

myJavaRoad 2009-03-13 11:45:32
如下题:
Integer i = new Integer (42);
Long 1 = new Long (42);
Double d = new Double (42.0);

Which two expressions evaluate to True? (Choose Two)

A.(i ==1)
B.(i == d)
C.(d == 1)
D.(i.equals (d))
E.(d.equals (i))
F.(i.equals (42))


equals比较的是对象的内容, 该怎么理解?
F.(i.equals (42)) 中,i指向的是new Integer (42); 而42就是一个数值,它们如何相等??

...全文
84 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
myJavaRoad 2009-03-14
  • 打赏
  • 举报
回复
在线等
myJavaRoad 2009-03-14
  • 打赏
  • 举报
回复
谢谢楼上的两位朋友

那是否可总结如下:
对于基本类型:编译器会把“整数”视为"int"类型, "小数"视为"double"类型,能否自动转化还要看它们之间是否兼容;
int i=1; //编译器默认把整数视为int类型
double d=1; //编译器默int类型自动转为double类型;
double d=1.0; //编译器默认的小数为double类型

float f=1.0 ;出错, double类型转化为float类型时,精度减少,报错
float f=1.0f 正确
------------
对于基本类型的包装类:编译器会把“整数”视为"Interger"类型, "小数"视为"Double"类型,只允许类型匹配

Integer i=1; 正确
Long i= 1; 错误,因Interger不能自动转为Long;

-------------

以上的理解是否正确??
starscc 2009-03-14
  • 打赏
  • 举报
回复
equals是Object类里的方法,一般的类都覆盖了这个方法,这个方法原先比较的是引用的地址,经过覆盖之后则比较的是对象的内容是否相等。
例如:
Integer i = new Integer(10);
Integer j = new Integer(10);
如果使用i.equals(j),则结果是ture 因为对象里存的都是10
而如果使用i == j,则结果是false,i,j是引用 它们指向一个对象,保存的是各自对象在heap中的地址,这当然不同。

接下来再回答你这句话:F.(i.equals (42)) 中,i指向的是new Integer (42); 而42就是一个数值,它们如何相等??
equals比较的是对象的内容,JDK1.5版本增加了自动打包跟自动解包的内容,
Integer i = new Integer(5);
Integer i = 5;
这两句在效果上是一样的.
myJavaRoad 2009-03-14
  • 打赏
  • 举报
回复
各位辛苦

结贴送分
ZangXT 2009-03-14
  • 打赏
  • 举报
回复
去看1.5新增的autoboxing的说明
晴天v1 2009-03-14
  • 打赏
  • 举报
回复
只有 F.(i.equals (42))
正确吧?
a285694982 2009-03-14
  • 打赏
  • 举报
回复
可以这么认为
dreamhunter_lan 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 myJavaRoad 的回复:]
谢谢楼上的答复

可我还是有点不明白:
你的意思是否是: 在作equals时(F.(i.equals (42)) )会作强制类型转换

还望解答
[/Quote]
理解有误
是因为编译的时候做auto-boxing(好像可以叫自动打包吧)了
把42打包成一个Integer的对象了
而Integer的equals的源码是:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}

所以就返回true了
回答完毕!
myJavaRoad 2009-03-14
  • 打赏
  • 举报
回复
谢谢楼上的答复

可我还是有点不明白:
你的意思是否是: 在作equals时(F.(i.equals (42)) )会作强制类型转换

还望解答
myJavaRoad 2009-03-14
  • 打赏
  • 举报
回复
谢谢楼上的答复

可我还是有点不明白:
你的意思是否是: 在作equals时(F.(i.equals (42)) )会作强制类型转换

还望解答
rypgood 2009-03-14
  • 打赏
  • 举报
回复
题目是错的
只有最后一个正确
至于为什么,你看看下面一行代码就知道了
Integer i=(Integer)42;
编译不会出错的哦
myJavaRoad 2009-03-13
  • 打赏
  • 举报
回复
都睡觉了么?

62,614

社区成员

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

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