java == 和Equals区别

1. ==和Equals 介绍

1.1. == 运算符概述

== :运算符

  1. 可以使用在基本数据类型变量和引用数据类型变量中
  2. 如果比较的是基本数据类型变量:比较两个变量保存的值是否相等。
  3. 如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
    补充: == 符号使用时,必须保证符号左右两边的变量类型一致。
1.2. ==运算符Demo
  • EqualsDemo 类 测试==运算符比较基本类型和引用类型结果
package com.bruce.lucky.java1;
/**
 * @author bruce
 * 
 */
public class EqualsDemo {
    public static void main(String[] args) {

        //基本数据类型
        int v1 = 5;
        int v2 = 5;
        char c1 = 5;
        // 执行结果对比两个数值为true
        System.out.println(v1 == v2);
        // 执行结果对比两个数值为true
        System.out.println(v1 == c1);

        //引用类型
        UserBean u1 = new UserBean();
        UserBean u2 = new UserBean();
        u1.setId(5);
        u2.setId(5);
        // 执行结果对比两个引用对象的地址,两个对象地址不同因此结果是false
        System.out.println(u1 == u2);
    }
}
  • UserBean 类
public class UserBean {
    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}
1.3. Equals方法 概述
  1. 方法只能被对象或类调用,而对象或类属于引用类型,所以equals方法只能在引用类型中使用。
  2. Object类中的equals方法比较的是两个对象的地址值。和 == 运算符比较两个对象地址值是一样的。
    Object类equals方法就是返回 == 运算符比较两个对象地址值。
    public boolean equals(Object obj) {
    return (this == obj);
    }
    3.重写Object类equals方法,比较的是两个对象的属性内容是否相等。例如:String类、File类、Date类等都重写了Object类的equals方法。
    4.自定义类继承自Object类的equals方法,因此比较的也是两个对象地址。
    5.自定义类重写Object类的equals方法实现比较两个对象属性内容是否相等。
1.4. Equals方法Demo
package com.bruce.lucky.java1;


/**
 * @author bruce
 * @create 2020/4/25 14:30
 */
public class EqualsDemo {
    public static void main(String[] args) {
        
        //----------------euqals方法-------------------------
		//引用类型
        UserBean u1 = new UserBean();
        UserBean u2 = new UserBean();
        u1.setId(5);
        u2.setId(5);
        
        //1.Object类的equals方法,比较两个对象地址值。返回结果为false
        boolean equals = u1.equals(u2);
        System.out.println("equals = " + equals);

        //2.String重写Object类Equals方法
        String str1 = new String("1");
        String str2 = new String("1");
        boolean stringEquals = str1.equals(str2);
        //String重写了equals方法对比两个对象属性值,返回结果为True
        System.out.println("stringEquals = " + stringEquals);

        //3.自定义类调用的是Object类的Equals方法比较的也是两个对象的地址
        boolean equalsUserBean = u1.equals(u2);
        // 返回结果为false
        System.out.println("equalsUserBean = " + equalsUserBean);

    }
}
  • UserBean 自定义引用类型类
public class UserBean {
    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

}
1.5.自定义类重写equals方法
  • UserBean类重写Object类的equals方法
package com.bruce.lucky.java1;

/**
 * @author bruce
 * @create 2020/4/25 14:38
 */
public class UserBean {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    //-----------自定义类重写equals方法----------------


    @Override
    public boolean equals(Object obj) {
        //判断调用equals方法对象引用和传入参数对象引用是否引用同一个对象,如果是直接返回true
        if (this == obj) {
            return true;
        }
        //判断传入的对象是否属于当前类对象。如果不是直接返回fasle
        if (obj instanceof UserBean) {
            //将Object类型转为当前类的类型
            UserBean userBean = (UserBean) obj;
            //比较两个对象每个属性是否相等,注意基本类型属性直接用==符号,引用类型属性要用equals方法
            if (this.id ==  && .equals()) {
                return true;
            } else {
                return false;
            }

        }
        return true;
    }
}

-测试自定义类重写equals方法

package com.bruce.lucky.java1;


/**
 * @author bruce
 * @create 2020/4/25 14:30
 */
public class EqualsDemo {
    public static void main(String[] args) {
	//----------------自定义类重写euqals方法-------------------------
        //引用类型
        UserBean u1 = new UserBean();
        UserBean u2 = new UserBean();
        u1.setId(5);
        u1.setName("apple");
        u2.setId(5);
        u2.setName("apple");

        //自定义类调用重写Object类的Equals方法比较的是两个对象属性内容是否相等
        boolean equalsUserBean = u1.equals(u2);
        // 返回结果为true
        System.out.println("equalsUserBean = " + equalsUserBean);
    }
}