Java中==与equales的引用

 在 论坛里看见有这样一个问题
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))

在jdk1.5的版本下测试发现,B、C编译错误,A、D、Efalse,Ftrue

原因:
==   是比较内存地址  
而equals有些例外。objcet的equals是进行内存地址的比较。
而Integer   、Long   、Double   等等的一些包装类是继承了obj的equals方法,进行了重构, 是对对象值的比较。包装器的equals方法比较两项内容:两个包装器的类型是否相同,两个包装器里面基本型的数值是否相同。当且仅当这两项内容都为真的时候equals方法才返回真
Integer、Long与Double是不相兼容的类,所以B、C编译不能通过

调用i.equals(42)时会对基本型42进行自动装箱,这句相当于i.equals(new   Integer(42))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值