代码编织梦想

1.1 基本概念区分

在Java中,==进行比较时:

a.如果==左右两侧是基本类型变量,比较的是变量中值是否相同

b.如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同

其实==比较的不管是基本数据类型,还是引用数据类型的变量,比较的都是值,只是引用类型变量存的值是对象的地址

 2)对于equals方法,比较的是是否是同一个对象

首先,equals()方法不能作用于基本数据类型的变量,

另外,equals()方法存在于Object类中,而Object类是所有类的直接或间接父类,所以说所有类中的equals()方法都继承自Object类,在没有重写equals()方法的类中,调用equals()方法其实和使用==的效果一样,也是比较的是引用类型的变量所指向的对象的地址,不过,Java提供的类中,有些类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值,比如String类。

// Object类中的equals方法

public boolean equals(Object obj) {
    return (this == obj);   // 使用引用中的地址直接来进行比较

}

如果不重写

class Person{
    private String name ;
    private int age ;
    public Person(String name, int age) {
    this.age = age ;
    this.name = name ;
    }
}
public class Test {
    public static void main(String[] args) {
        Person p1 = new Person("java", 10) ;
        Person p2 = new Person("java", 10) ;
        int a = 10;
        int b = 10;
        System.out.println(a == b);// 输出true
        System.out.println(p1 == p2);  // 输出false
        System.out.println(p1.equals(p2)); // 输出false
    }
}

Person类重写equals方法后,然后比较:

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型

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

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false ;
        }
        if(this == obj) {
            return true ;
        }
        // 不是Person类对象

        if (!(obj instanceof Person)) {
            return false ;
        }

        Person person = (Person) obj ; // 向下转型,比较属性值
        return this.name.equals(person.name) && this.age==person.age ;
    }

}

public class Test {
    public static void main(String[] args) {
        Person p1 = new Person("java", 10) ;
        Person p2 = new Person("java", 10) ;
        int a = 10;
        int b = 10;
        System.out.println(a == b);// 输出true
        System.out.println(p1 == p2);  // 输出false
        System.out.println(p1.equals(p2)); // 输出true
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_73292466/article/details/129973749