- 有程序片段如下,以下表达式结果为 true 的是(B)
A. s==tFloat s = new Float(0.1f);
Float t = new Float(0.1f);
Double u = new Double(0.1);
B. s.equals(t)
C. u.equals(s)
D. t.equals(u)
解析:
Float类和Double类都重写对应的equals方法,在比较之前都会判断是否同属于Float对象或Double对象,如果不是直接返回false,如果是再继续比较对应的数值大小。
JDK1.8的源码如下:
1. Float类重写了equals方法:
public boolean equals(Object obj) {
return (obj instanceof Float)
&& (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
}
- Double类重写了equals方法:
public boolean equals(Object obj) {
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) == doubleToLongBits(value));
}