Java--“equals()”和“==”的区别(详细完整版)

目录

一: "=="的使用

二:qeuals()方法的使用

三:区别总结


在最前面。首先纠正一个思维误区:equals()方法是比较值的。

equals()方法是比较值的(该说法错误)

一: "=="的使用

1)可以使用在基本数据类型变量和引用数据类型变量中

2)如果比较的是基本数据类型变量:比较的是两个变量保存的数据是否相等。(不一定要类型相同)

     如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个引用是否指向同一个实体。

                                                           (补充:此时“==”两边的变量类型要一致)

扫描二维码关注公众号,回复: 12788588 查看本文章

基本数据类型变量比较举例

        int i = 10;
        int j = 10;
        double d = 10.0;
        System.out.println(i == d); // true 因为存在类型提升,所以可以进行比较
        char ch = 10;
        System.out.println(ch == i); // true .
        // 注意上面返回的true,因为ch对应的值是10,而不是说'10',不然字符存储类1两位字符呀
        char c1 = 'A';
        char c2 = 65;
        System.out.println(c1== c2);   //true

引用数据类型举例

public class Customer {
    public String name;
    private int age;

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

public class equals {
    public static void main(String[] args) {

        Customer cu1 = new Customer("Tom",11);
        Customer cu2 = new Customer("Tom",11);
        System.out.println(cu1 == cu2); // false
}

特别注意:String的两种不同定义和初始化方法举例

public class equals {
    public static void main(String[] args) {
        String s1 = "BB";
        String s2 = "BB";
        System.out.println(s1 == s2); // TRUE
        String s3 = new String("BB");
        String s4 = new String("BB");
        System.out.println(s3 == s4);  //FALSE
    }
}

二:qeuals()方法的使用

1)equals()是一个方法,而非运算符

2)equals()方法只能适用于引用数据类型

3)Object类中equals()的定义:

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

【注意】:Object类中equals()还是和“==”一样,比较的还是引用数据类型的地址。

System.out.println(cu1.equals(cu2));  //flase

4)上面(3)中是最原始的Object里面的equals()方法,但是像String, Date , File ,  包装类等都重写了Object类中的equals()方法。

重新写之和,比较就不是两个引用的地址是否相同,而是比较两个对象的“实体内容”是否相等,即对应的数值是否相等。

        String str1 = new String("ye");
        String str2 = new String("ye");
        System.out.println(str1.equals(str2));// true

5)通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的“实体内容”(数值)是否相等。

但是我们自定义的类,对应的是Object里面的equals()方法,因此,我们需要对Object类中的equals()进行重写。

重写的原则:比较两个对象的实体内容是否相同。

我们可以手写也可以通过编辑器自动生成,下面是我们手动编写的重写equals()方法。

public class Customer {
    public String name;
    private int age;

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

    @Override
    public boolean equals(Object obj) {
        if(this == obj){
            return true;
        }

        if(obj instanceof  Customer){
            Customer cust = (Customer) obj;
            //比较·两个对象的每个属性是否都相同
            if (this.age == cust.age && this.name.equals(cust.name)){
                // int类型的age使用==比较,String类型的name使用equals比较
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
}

三:区别总结

猜你喜欢

转载自blog.csdn.net/yezonghui/article/details/112516387