问题一: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); } }
文章对你有帮助的话,顺手点个赞哈!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)