“==“和“equals“

“==”和“equals”

“==”

  1. 既可以判断基本类型,又可以判断引用类型。
  2. 如果判断的是基本类型,判断的是值是否相等。
  3. 如果判断引用类型,判断的是地址是否相等,即判断是否是一个对象。

可以理解成只要不new新对象,其他一律视为相等。

equals

  • 是object类中的方法,只能判断引用类型。
  • 默认判断地址是否相等,子类中往往重写该方法,用于判断值是否相等,比如Integer,String

如何重写equals方法?

//定义一个Person类,有名字,年龄,性别,并重写equals方法。
public class Person {
    
    
    private String name;
    private int age;
    private char gender;

    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;
    }

    public char getGender() {
    
    
        return gender;
    }

    public void setGender(char gender) {
    
    
        this.gender = gender;
    }

    public Person(String name, int age, char gender) {
    
    
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    //重写equals方法,判断值是否相等。
    public boolean equals(Object obj) {
    
    
        if(this==obj){
    
    //判断地址是否相同,即对象是否相同。
            return true;
        }
        //判断是否为Person类,不是的话没办法比较。
        if(obj instanceof Person){
    
    
            Person p = (Person) obj;//向下转型,把父类对象obj转换成子类Person类对象。
            //返回判断参数类型的属性和本类中的属性值是否相等,相等则返回true,不相等则为false
            return this.name.equals(p.name)&&this.age==p.age && this.gender==p.gender;
        }
        return false;
    }

//定义测试类
public class PersonTest {
    
    
    public static void main(String[] args) {
    
    
        Person person = new Person("陈冠希",22,'男');
        Person person1 = new Person("陈冠希",22,'男');
        System.out.println(person.equals(person1));//true,如果没有重写equals方法,默认是比较地址,则结果为false.
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_61370937/article/details/120640174