zoukankan      html  css  js  c++  java
  • 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,所以通常需要重写该方法来提供逻辑一致性的比较

  • 相关阅读:
    【代码笔记】Java连连看项目的实现(1)——JTable 、TableModel的使用
    【代码笔记】多线程游戏开发——伏魔记:第一步——开始游戏界面实现(一)
    【代码笔记】Java基础:Java的方法和类
    【代码笔记】Java基础:类的继承(构造器)
    【代码笔记】XML深入学习:DTD约束与DTD语法(2)
    常见标签的全称
    CSS中margin与padding的区别
    jquery 执行语句无响应
    jquery autocomplete插件结合ajax使用
    在使用flask_Bootstrap的时候先加载了jquery-ui然后再加载jQuery,导致jQuery-ui无法使用。
  • 原文地址:https://www.cnblogs.com/KL2016/p/14859129.html
Copyright © 2011-2022 走看看