==和equals的区别

一、 ==是运算符

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

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

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

二、equals()方法的使用

1.是一个方法,而非运算符

2.只能使用于引用数据类型

3.Object类当中定义的equals()如下代码:

public boolean equals(Object obj) {
return (this == obj);
}
说明:Object类当中定义的equals和==是一致的,比较的是两个对象的地址值是否相同

4.像String、Date、File、包装类等都重写了Object类当中equals()方法,重写以后比较的不是两个引用的地址值,而是两个对象“实体”内容是否相同

5.通常情况下,我们自定义的类需要使用equals()的话,也通常是比较两个对象的“实体”内容是否相同,那么我们就需要对Object类中的equals()进行重写

import java.util.Objects;

public class EqualsTest {
    public static void main(String[] args) {
        //==运算符的   基本数据类型---------------------------------------
        int i = 10;
        int j = 10;
        double d = 10.0;

        System.out.println(i == j);//true
        System.out.println(i == d);//true

        boolean b =true;

        char c = 10;
        System.out.println(i == c);//true

        char c1 = 'A'; //对应ASCII表就是65
        char c2 = 65;
        System.out.println(c1 == c2 );//true

        //==运算符的  引用数据类型-----------------------
        Customer customer1 = new Customer("张三",15);
        Customer customer2 = new Customer("张三",15);
        System.out.println(customer1 == customer2); //false,地址值不同

        String str1 = new String("abc");
        String str2 = new String("abc");
        System.out.println(str1 == str2); //false ,地址值不同

        System.out.println("*************************");
        //equals()的  引用数据类型------------------------

        //如果没有重写equals()的话,这里的equals()是object类当中声明的equals方法(object类当中定义的equals与==一致的)
        //System.out.println(customer1.equals(customer2));//false,比较两个对象的地址值


        System.out.println(customer1.equals(customer2));//重写后是true,比较两个对象的“实体”内容

        //这里的是String类当中重写的equals方法
        System.out.println(str1.equals(str2));//true,比较两个对象的“实体”内容
    }
}

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

    //自定义的类进行重写equals()方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Customer customer = (Customer) o;
        return age == customer.age && Objects.equals(name, customer.name);
    }
}