面试题: == 和 equals() 区别:
一、 == 的使用:
== :运算符
(1) 可以使用在基本数据类型变量和引用数据类型变量中
(2) 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)
如果比较的是引用数据类型变量: 比较的两个对象的堆内存地址,即两个引用是否指向同一个对象实体。
二、equals()方法的使用:
(1)当你创建一个类的时候,它自动继承自 Objcet 类。如果你不覆写 equals() ,你将会获得 Objcet 对象的 equals() 函数。默认情况下,这个函数会比较对象的地址。所以只有你在比较同一个对象的时候,你才会获得true。
(2)是一个方法,而非运算符
(3)只能适用于引用数据类型
(4) Object类中equals()的定义:
public boolean equals(Object obj) {
-------return (this == obj);
}
说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
(5)像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
重写的原则:比较两个对象的实体内容是否相同.
package com.library.exercise;
import java.util.Date;
public class CustomerTest {
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(i == b); 比较不了
char c = 10;
System.out.println(i == c);//true
char c1 = 'A';
char c2 = 65;
System.out.println(c1 == c2);//true
//引用类型:
Customer cust1 = new Customer("雷姆",19);
Customer cust2 = new Customer("雷姆",19);
System.out.println(cust1 == cust2);//false
String str1 = new String("热爱可抵岁月漫长");
String str2 = new String("热爱可抵岁月漫长");
System.out.println(str1 == str2);//false
System.out.println("****************************");
System.out.println(cust1.equals(cust2));//false--->true
System.out.println(str1.equals(str2));//true
Date date1 = new Date(32432525324L);
Date date2 = new Date(32432525324L);
System.out.println(date1.equals(date2));//true
}
}
三、如何进行重写:
右击,选择generate
package com.atguigu.java1;
public class Customer {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Customer() {
super();
}
public Customer(String name, int age) {
super();
this.name = name;
this.age = age;
}
@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);
}
}