== 和 equals 的对比

==equals 的对比



== 是一个比较运算符

  1. == : 既可以判断基本类型,又可以判断引用类型
  2. == : 如果判断基本类型,判断的是值是否相等。示例 : int i = 10; double d = 10.0 相等
  3. == : 如果判断引用类型,判断的是地址是否相等,即判断是不是同一个对象
  4. equals : 是Object类中的方法,只能判断引用类型
  5. 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。比如Integer String
  • String 重写 equals
public boolean equals(Object anObject) {
    if (this == anObject) {	// 如果是同一个对象
        return true;
    }
    if (anObject instanceof String) {	// 判断类型
        String anotherString = (String)anObject;	// 向下转型
        int n = value.length;
        if (n == anotherString.value.length) {	// 如果长度相同
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {	// 一个一个的比较字符
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;	// 如果两个字符串的所有字符都相等,则返回 true
        }
    }
    return false;	// 如果比较的不是字符串,则直接返回 false
}
  • Integer 重写 equals
public boolean equals(Object obj) {
    if (obj instanceof Integer) {	
        return value == ((Integer)obj).intValue();
    }
    return false;
}
  • 重写 equals
class Person{
    private String name;
    private int age;

    public Person() { }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

== 和 equals 的对比

上一篇:yield


下一篇:Revit记录需要涂黑的格子---供自己使用