首页 > 试题广场 >

有程序片段如下,以下表达式结果为 true 的是( ) Fl

[单选题]

有程序片段如下,以下表达式结果为 true 的是(

Float  s=new  Float(0.1f);

Float  t=new  Float(0.1f);

Double  u=new  Double(0.1);

  • s==t
  • s.equals(t)
  • u.equals(s)
  • 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)); 
}

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。
编辑于 2017-09-11 15:32:14 回复(13)
一般情况下,浮点数是不直接进行判等比较的,因为浮点数存在精度问题。要比较两个浮点数,一般的比较方法是设定一个精度,当二者的差小于某个精度时,认为二者相等。例如:
if (Math.abs(s - t) < 0.001) {
System.out.println("equal");
}else {
System.out.println("not equal");
}
发表于 2017-06-02 14:10:40 回复(0)
Float的==比较的是地址,只有同一个类才会返回true,但是equals不是,Float的equals被重写了,只校验类型是不是Float以及值是否相同即可
发表于 2017-08-02 10:59:39 回复(3)
== 比较的是两个对象的引用地址是否一致,t 和 s 两个对象是分别两次 new 出来的,引用地址不一样,A 错;
在 BCD 中,需要关注的是 Float 类的 equals() 与 Double 类的 equals()的区别。两个包装类的 equals() 都被重写了,同类判等值可以为 true,不同类判等值就为 false,因此B对,CD错。

发表于 2018-02-24 11:13:07 回复(0)
==比较内存地址 equals方法先比较类型是否相同,如果相同再比较值是否相同
发表于 2022-01-03 16:48:01 回复(1)
根据查看源码,Float类和Double类都是重写了equals方法,但是他们首先判断的是两个对象的类型是不是相等的,如果不相等直接返回false,只有当两个对象的类型相同的时候,才会进一步的比较两个对象的内容.
发表于 2018-10-29 21:44:13 回复(0)
选B
A、两个对象,==比较的是内存地址,肯定不一样,都是new出来的。新分配了内存的。
C、D 包装类的equals方法,不会拆装箱,比较的时候,先比较是不是一个类型,然后才比较是否相同。
发表于 2018-07-07 13:36:38 回复(1)
float是基本数据类型,Float是包装类(封装类)。double 和float在存储的时候精度是不一样的也就是说他们的实际值是不一样的。如果你仔细点的话就会发现在很多位小数0后面会有个不是0的小数出现....要比较float和double不管是float和float、double和double还是float和double进行比较 最好能指定统一的精度 这样才不会在比较的时候出这种由系统引发的意外
发表于 2017-05-26 11:57:33 回复(1)
Float类和Double类都重写对于的equals方法,在比较之前都会判断是否同属于Float对象或Double对象,如果不是直接返回false,如果是再继续比较对应的数值大小。
发表于 2020-06-13 23:50:25 回复(0)
结果就是true.
warning说Float从version9后就deprecation了
发表于 2019-09-29 23:46:13 回复(0)
判定值之前先判断是不是同一种类,不是的话会返回false,所以float.equals(double),double.equals(float)都是错误的
发表于 2019-07-21 22:00:14 回复(0)
想问选项A,两个Float包装类在“==”时不会自动拆箱吗,那比较的不是他指向的值吗?不是对的吗?
还有选项B,两个相同类型的包装类在比较的时候,没有像String那样对equals方法重写,比较的不是引用类型变量所指向的地址吗?
求解,谢谢了!
发表于 2017-05-31 10:07:59 回复(7)
double 和float在存储的时候精度是不一样的,也就是说他们的实际值是不一样的。
如果你仔细点的话就会发现在很多位小数0后面会有个不是0的小数出现....

发表于 2017-05-27 23:16:32 回复(0)
String和Double和Float等封装类都重写了equals方法
发表于 2023-02-10 07:44:08 回复(1)
重写了equals方法,具体是如果类不同,返回false,如果是同一类,那么判断他们的属性是否相同,也就是值是否相同。
发表于 2021-11-07 16:01:06 回复(0)
mark
发表于 2024-03-14 16:59:44 回复(0)
float和double都重写了equals 都是先判断两者是不是float或者double先 两个相同的话,在比较值
编辑于 2024-02-18 23:25:27 回复(0)
Float类和Double类都重写了equals方法,在比较之前都会判断是否同属于Float对象或Double对象,如果不是直接返回false,如果是再继续比较对应的数值大小。
发表于 2023-03-20 15:02:40 回复(0)
Float类和Double类都重写对于的equals方法,在比较之前都会判断是否同属于Float对象或Double对象,如果不是直接返回false,如果是再继续比较对应的数值大小。
发表于 2023-01-19 14:08:39 回复(0)
double 和float在存储的时候精度是不一样的,也就是说他们的实际值是不一样的。 如果你仔细点的话就会发现在很多位小数0后面会有个不是0的小数出现....
发表于 2022-11-17 20:03:19 回复(0)