面试题:== 和 equals() 的区别

package com.pan.object00;
/**
*
*一、回顾 == 的使用
* == :运算符
* 1、可以使用基本类型数据变量和引用数据类型变量中
* 2、如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等。(不一定类型要相同)
* 如果比较的是引用数据类型变量,比较两个对象的地址值是否相同,即两个引用是否 指向同一个对象实体
*
* 二、equals()方法的使用
* 1、是一个方法,而不是一个运算符
* 2、只能适用于引用数据类型
* 3、Object类中的equals()的定义
* public boolean equals(Object obj) {
* return (this == obj);
* }
* 说明:Object类中定义的equals()和等等的作用是相同的,比较两个对象的地址值是否相等
* 4、像String、Date、File、包装类等都重写了Object中的equals方法,重写以后,
* 比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同

*/
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;
//System.out.println( b == i);

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

char c1 = 'A';
char c2 = 65;
System.out.println(c1== c2); //true

//引用数据类型
Customer customer = new Customer("张三", 50);
Customer customer1 = new Customer("张三", 50);
System.out.println(customer == customer1);

String string = new String();
String string1 = new String();
System.out.println(string == string1);

System.out.println("-----------------");
System.out.println(customer.equals(customer1)); //false
System.out.println(string.equals(string1)); //true

}
}


//重写equals的步骤:
//重写的原则,比较两个对象的实体内容(即name和age是否是相等的)
//手动实现equals()方法
@Override
public boolean equals(Object obj) {
if (this == obj) { //1、先判断地址值是不是一样,是一样说明是同一个对象
return true;
}
if (obj instanceof Customer) { //2、判断是不是同一个类型
Customer cust = (Customer) obj; //3、强转为同一个类型
//4、比较两个对象的每一个数是否都相同
/*if (this.age == cust.age && this.name.equals(cust.name)) return true;
else return false;*/

//或者
return this.age == cust.age && this.name.equals(cust.name);
}
return false;
}
posted @ 2021-12-16 23:44  燈塔  阅读(68)  评论(0)    收藏  举报