java 判断精度_随笔⑦ Java中的比较 ==,equals以及精度对比较的影响

Java中的比较 ==,equals

① 对于==,如果是作用于基本数据类型的变量,则直接比较其存储的"值"是否相等;如果是作用于引用类型的变量,则比较的是所指向的对象的地址。

② 对于equals方法,注意:equals方法不能作用于基本数据类型的变量;

如果没有对equals方法进行重写,则比较的是引用类型变量所指向的对象的地址;诸如String,Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

③ Float类型值的比较:

一般情况下,浮点数是不直接进行判等比较的,因为浮点数存在精度问题。要比较两个浮点数,一般的比较方法是设定一个精度,当二者的差小于某个精度时,认为二者相等。例如:s,t为float类型。

1 if (Math.abs(s - t) < 0.001) {2 System.out.println("equal");3 }else{4 System.out.println("not equal");5 }

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

JDK1.8的源码如下:

1.Float类重写了equals方法:

1 public booleanequals(Object obj) {2 return (obj instanceof Float)&& (floatToIntBits(((Float)obj).value) ==floatToIntBits(value));3 }

2.Double类重写了equals方法:

1 public booleanequals(Object obj) {2 return (obj instanceof Double)&& (doubleToLongBits(((Double)obj).value) ==doubleToLongBits(value));3 }

--------------------------------------------------------------------------------------------------------使用实例------------------------------------------------------------------------------------------------------------------------

1 public classTest{2 public String name="abc";3 public static voidmain(String[] args){4 Test test=newTest();5 Test testB=newTest();6 System.out.println(test.equals(testB)+","+test.name.equals(testB.name)); //注意test.equals(testB)是两个对象之间的比较;test.name.equals(testB.name)是String类型的比较

7 }8 }

【解析】对于对象的比较,使用Object类的比较器如下所示:

1 public booleanequals(Object obj) {2 return (this ==obj);3 }

没有重写equals时,是直接用==判断的。而String中重写了equals方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值