Java 小细节

Java equals详解

2017-09-27  本文已影响8人  谢随安

在引用类型中里:

这里需要指出一个容易让人误会的地方,你可能会以为 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。

上一篇 下一篇

猜你喜欢

热点阅读