java == 和Equals区别
1. ==和Equals 介绍
1.1. == 运算符概述
== :运算符
- 可以使用在基本数据类型变量和引用数据类型变量中
- 如果比较的是基本数据类型变量:比较两个变量保存的值是否相等。
- 如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
补充: == 符号使用时,必须保证符号左右两边的变量类型一致。
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方法 概述
- 方法只能被对象或类调用,而对象或类属于引用类型,所以equals方法只能在引用类型中使用。
- 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);
}
}