问题一:java语言中什么类型的数据可以使用"=="判断?
- java中基本数据类型比较是否相等,使用"=="
问题二: java中什么类型的数据需要使用equals判断?
- java中所有的引用数据类型统一使用equals方法来判断是否相等。
问题三:什么时候重写equals()方法?为什么要重写equals()方法?
- 以后所有类的equals方法基本都需要重写。(除了代码中仅仅使用基本数据类型)
- 因为Object中的equals方法比较的是两个对象的内存地址,我们应该比较内容,所以需要重写。
问题四:equals有什么重写规则?
- 编写时候自己定,符合语法规则规范即可。主要看是什么和什么相等时表示两个对象相等。
例如:对象和对象比较:调用equals方法
- String类是SUN公司编写的,所以String类的equals已经方法重写了。 以后判断两个字符串是否相等,最好不要使用 “==”,要调用字符串对象的equals方法。
下面代码测试Object中的equals方法
此处为自己写的测试例子,代码中有详细注解
import java.util.Objects;
public class EqualsTest {
public static void main(String[] args) {
//创建地址对象 s1 和 用户对象 u1
Address s1 = new Address("北京","大兴区","121212");
User u1 = new User("张三",s1);
//创建地址对象 s2 和 用户对象 u2
Address s2 = new Address("北京","大兴区","121212");
User u2 = new User("张三",s2);
//判断s1、s2姓名和地址是否相同 相同输出 true ,不同输出 false
System.out.println(u1.getAddr().equals(u2.getAddr()));
}
}
//用户类
class User {
//私有变量 名字 地址
private String name;
private Address addr;
//构造方法
public User() {
}
public User(String name, Address addr) {
this.name = name;
this.addr = addr;
}
//getting and setting
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddr() {
return addr;
}
public void setAddr(Address addr) {
this.addr = addr;
}
//重写equals方法 判断用户 姓名 和 地址 是否相同
@Override
public boolean equals(Object o) {
//如果两个地址相同,则表示指向同一对象,保存内容一定相同
if (this == o) return true;
//如果比较的内容为空 或者 二者的类型不同(不属于同一范畴 ,例如 猫和牛 无法比较),返回 false
if (o == null || getClass() != o.getClass()) return false;
//o向上转型 从Object类转为User类(运行到此处表示比较的二者属于相同类型,可跳过判断 直接转型)
User user = (User) o;
//返回结果 如果name相同 且 地址相同 返回true ,否则返回false
//name.equals(user.name)中name为引用数据类型String,SUN公司已经重写了equals,可以直接使用
//addr.equals(user.addr)中addr为引用数据类型Address,需要调用地址类中的 equals方法 ,故地址类中 equals 方法需要重写
return name.equals(user.name) && addr.equals(user.addr);
}
}
//地址类
class Address {
//变量 城市 街道
String city;
String street;
String zipcode;
//构造方法
public Address() {
}
public Address(String city, String street, String zipcode) {
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
//重写equals方法 方便 User中调用
@Override
public boolean equals(Object o) {
//内容不做详细解释,可以参考User中equals方法重写的注释
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Address address = (Address) o;
return city.equals(address.city) && street.equals(address.street) && zipcode.equals(address.zipcode);
}
}
文章对你有帮助的话,顺手点个赞哈!