• a.equals(b) 判断对象相等


    一、值是null的情况:

    1.a.equals(b), a 是null, 抛出NullPointException异常。

    2.a.equals(b), a不是null, b是null,  返回false

    3.Objects.equals(a, b)比较时, 若a 和 b 都是null, 则返回 true, 如果a 和 b 其中一个是null, 另一个不是null, 则返回false。注意:不会抛出空指针异常。

     

    null.equals("abc")    →   抛出 NullPointerException 异常  
    "abc".equals(null)    →   返回 false  
    null.equals(null)     →   抛出 NullPointerException 异常  

     

    Objects.equals(null, "abc")    →   返回 false  
    Objects.equals("abc",null)     →   返回 false  
    Objects.equals(null, null)     →   返回 true 

     

    二、值是空字符串的情况:

    "abc".equals("")    →   返回 false  
    "".equals("abc")    →   返回 false  
    "".equals("")       →   返回 true 

    Objects.equals("abc", "")    →   返回 false  
    Objects.equals("","abc")     →   返回 false  
    Objects.equals("","")        →   返回 true  

    三、源码分析

    public final class Objects {  
        private Objects() {  
            throw new AssertionError("No java.util.Objects instances for you!");  
        }  
       
        /**  
         * Returns {@code true} if the arguments are equal to each other  
         * and {@code false} otherwise.  
         * Consequently, if both arguments are {@code null}, {@code true}  
         * is returned and if exactly one argument is {@code null}, {@code  
         * false} is returned.  Otherwise, equality is determined by using  
         * the {@link Object#equals equals} method of the first  
         * argument.  
         *  
         * @param a an object  
         * @param b an object to be compared with {@code a} for equality  
         * @return {@code true} if the arguments are equal to each other  
         * and {@code false} otherwise  
         * @see Object#equals(Object)  
         */  
        public static boolean equals(Object a, Object b) {  
            return (a == b) || (a != null && a.equals(b));  
        }  

    2.说明

    首先,进行了对象地址的判断,如果是真,则不再继续判断。

    如果不相等,后面的表达式的意思是,先判断a不为空,然后根据上面的知识点,就不会再出现空指针。

    所以,如果都是null,在第一个判断上就为true了。如果不为空,地址不同,就重要的是判断a.equals(b)。

     

    四、“a==b”和”a.equals(b)”有什么区别?

    如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象才会返回 true。

    而 a.equals(b) 是进行逻辑比较,当内容相同时,返回true,所以通常需要重写该方法来提供逻辑一致性的比较

  • 相关阅读:
    DL_WITH_PY系统学习(第2章)
    JavaScript学习require的用法
    Vue的prop属性
    vue store action与Mutation与getters的具体用法
    OpenEBS 实现 Local PV 动态持久化存储
    vue modules 使用
    【转载】 tSNE是什么? —— 使用指南
    【转载】 Do's and Don'ts of using tSNE to Understand Vision Models —— tSNE 作者写的使用指南(PPT版本)
    【转载】 机器学习数据可视化 (tSNE 使用指南)—— Why You Are Using tSNE Wrong
    【转载】 机器学习的高维数据可视化技术(tSNE 介绍) 外文博客原文:How tSNE works and Dimensionality Reduction
  • 原文地址:https://www.cnblogs.com/KL2016/p/14859129.html
Copyright © 2020-2023  润新知