• 随笔⑦ 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 boolean equals(Object obj) {
    2       return (obj instanceof Float)&& (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
    3 }

    2.Double类重写了equals方法:

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

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

    ① 

    1 public class Test{ 
    2     public String name="abc"; 
    3     public static void main(String[] args){ 
    4         Test test=new Test(); 
    5         Test testB=new Test(); 
    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 boolean equals(Object obj) {
    2         return (this == obj);
    3 }

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

  • 相关阅读:
    QProgressBar的使用例子
    kube框架结构-一个小型响应式CSS框架
    窗口类型(Widget, Window, Dialog, Desktop, SubWindow等等)
    Qt 之 设置窗口边框的圆角(使用QSS和PaintEvent两种方法)
    十大开源游戏引擎深入比较
    一种通用查询语言的定义与实践
    EF分页问题探讨之 OrderBy
    手把手教你做关键词匹配项目
    git
    Extension+NVelocity
  • 原文地址:https://www.cnblogs.com/lyr612556/p/7816662.html
Copyright © 2020-2023  润新知