Java equals详解

作者: 谢随安 | 来源:发表于2017-09-27 14:45 被阅读8次

    在引用类型中里:

    • == 比较的是两个引用是否指向的是堆空间中的同一地址
    • equals 是一个普通的方法,该方法返回的结果依赖于自身的实现

    这里需要指出一个容易让人误会的地方,你可能会以为 equals 比较的就是两个引用类型的值?其实不然,对于每个基础类型的封装类,equals 都有对应的不同实现。
    那么如果一个类(如下面的NewObject)没有实现实现 equals 方法会怎么样?在Java中,如果一个类没有继承其他类,那么他会默认继承Object这个类,这个类会继承Object的equals方法,而Object类的equals方法并非比较值,其作用此时相当于 ==

    新建两个文件: NewObject.javaequals.java

    package equals;
    
    public class NewObject {
        private String str;
    
        public NewObject(String str){
            this.str = str ;
        }
    }
    
    
    package equals;
    
    /**
     * Created by 97396 on 2017/9/26.
     */
    public class equals {
        public static void main(String[] args) {
            String str1 = new String("abc");
            String str2 = new String("abc");
    
            Integer int1 = new Integer(1);
            Integer int2 = new Integer(1);
    
            NewObject ob1 = new NewObject("object");
            NewObject ob2 = new NewObject("object");
    
            System.out.println("str1.equals(str2):" + str1.equals(str2));
            System.out.println("int1.equals(int2):" + int1.equals(int2));
            System.out.println("ob1.equals(ob2):" + ob1.equals(ob2));
    
        }
    }
    

    运行上面的代码结果如下:

    str1.equals(str2):true
    int1.equals(int2):true
    ob1.equals(ob2):false
    

    NewObject这个类并没有实现equals方法,没有报错的原因是它继承了Object类的equals方法。

        public boolean equals(Object obj) {
            return (this == obj);
        }
    

    Object类中的equals 方法只有一行,判断两个引用是否指向同一个对象。因此 ob1.equals(ob2) 的返回结果为false。

    相关文章

      网友评论

        本文标题:Java equals详解

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