1. 有程序片段如下,以下表达式结果为 true 的是(B)
      1. Float s = new Float(0.1f);
      2. Float t = new Float(0.1f);
      3. Double u = new Double(0.1);
      A. s==t
      B. s.equals(t)
      C. u.equals(s)
      D. t.equals(u)

    解析:
    Float类和Double类都重写对应的equals方法,在比较之前都会判断是否同属于Float对象或Double对象,如果不是直接返回false,如果是再继续比较对应的数值大小。

    JDK1.8的源码如下:
    1. Float类重写了equals方法:

    1. public boolean equals(Object obj) {
    2. return (obj instanceof Float)
    3. && (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
    4. }
    1. Double类重写了equals方法:
      1. public boolean equals(Object obj) {
      2. return (obj instanceof Double)
      3. && (doubleToLongBits(((Double)obj).value) == doubleToLongBits(value));
      4. }