美文网首页
java 中的 String 类型的 a == b、a.equ

java 中的 String 类型的 a == b、a.equ

作者: 春泥村雨 | 来源:发表于2020-08-30 22:18 被阅读0次

    1. a == b

    1. 当比较对象为基本数据类型时,比较的是数据的大小
    int a = 10;
    int b = 10;
    a == b;//true
    
    1. 当比较对象为引用类型时,比较的是引用类型中存放的地址
    • String类型
    String a = "abc";
    String b = "abc";
    //解析:字符串”abc”创建时是在方法区的常量池中开辟空间,且下次可以重复使用,a,b 指向地址相同,判等结果为 true
    a == b;//true
    
    • Integer类型
    Integer a = new Integer(45);
    Integer b = new Integer(45);
    //解析:a 与 b 分别在堆区开辟了空间,两个变量所指向的地址不同,即使指向地址中的内容相同,判等结果为 false
    a == b;//false
    
    //Integer包装类型中存在自动装箱的情况
    //当数据范围在 -128~127 之间时,创建的对象会在方法区的常量池中开辟空间(可复用)
    //数据超出范围会在堆区中开辟空间
    Integer a = 127; 
    Integer b = 127; 
    a == b;//true,常量池中开辟空间
    Integer c = 128; 
    Integer d = 128; 
    c == d;//false,堆区中开辟空间
    

    2. a.equals(b)

    equals() 方法是对象比较函数,按照对象比较,没有覆写 equals() 方法的类会调用 Object 的 equals() 方法,Object 类的 equals() 方法直接用 == 实现,比较的是地址。

    String a = new String("abc");
    String b = new String("abc");
    //a.equals(b) 是进行逻辑比较,当内容相同时返回 true
    //在做 equals 比较的时候一定要确保调用 equals 方法的对象不为空
    a.equals(b);//true
    

    3. Objects.equals(a, b)

    Java 7 新增 Objects 类的equals方法,Objects 类是 Object 的工具类

    //Objects.equals(a,b)可避免空指针异常,但效率会有所下降
    System.out.println("Objects.equals(a,b):" + (Objects.equals(a, b) ? true : false));
    
    • Objects.equals(a, b) 源码
    public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }
    

    4. BigDecimal 的等值比较用b1.compareTo(b2)

    //BigDecimal 的等值比较应使用compareTo()方法,而不是 equals()方法
    BigDecimal b1 = new BigDecimal("1.0");
    BigDecimal b2 = new BigDecimal("1.00");
    //equals()方法会比较值和精度( 1.0 与 1.00 返回结果为 false)
    System.out.println("b1.equals(b2):" + b1.equals(b2));//false
    //compareTo()则会忽略精度
    System.out.println("b1.compareTo(b2):" + b1.compareTo(b2));//相等:返回0,否则返回-1
    

    5. 参考链接

    https://blog.csdn.net/riemann_/article/details/89167625?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

    相关文章

      网友评论

          本文标题:java 中的 String 类型的 a == b、a.equ

          本文链接:https://www.haomeiwen.com/subject/wtkysktx.html