在 论坛里看见有这样一个问题
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
原因:
调用i.equals(42)时会对基本型42进行自动装箱,这句相当于i.equals(new Integer(42))
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编译不能通过
而equals有些例外。objcet的equals是进行内存地址的比较。
而Integer 、Long 、Double 等等的一些包装类是继承了obj的equals方法,进行了重构, 是对对象值的比较。包装器的equals方法比较两项内容:两个包装器的类型是否相同,两个包装器里面基本型的数值是否相同。当且仅当这两项内容都为真的时候equals方法才返回真
调用i.equals(42)时会对基本型42进行自动装箱,这句相当于i.equals(new Integer(42))