有程序片段如下,以下表达式结果为 true 的是( )
Float s=new Float(0.1f);
Float t=new Float(0.1f);
Double u=new Double(0.1);
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)); }
2.Double类重写了equals方法:
public boolean equals(Object obj) { return (obj instanceof Double) && (doubleToLongBits(((Double)obj).value) == doubleToLongBits(value)); }3. 题目A比较的是两个对象的地址,显然不同的对象地址不同,A是false。B同属于Float对象且值相等,true。C和D比较的对象不同,false。