如果有两个数字要判断是否相等,可以使用"=="完成,如果字符串要判断是否相同可以使用equals()方法,但是如果有一个自定义类,要判断它的两个对象是否相等,那么必须要实现类对象中所有属性内容的比较
String类中的equals()方法也属于对象比较操作,它具备null的验证
对象比较实现:
package oop;
/**
* 对象比较实现
*/
//定义一个图书类
class Book1{
private String title;//书名
private double price;//价格
//定义构造方法
//无参
public Book1() {
}
//有参
public Book1(String title, double price) {
this.title = title;
this.price = price;
}
//定义get和set方法
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
//定义一个对象比较的方法
/**
* 进行本类对象的比较操作,在比较过程中首先判断传入的对象是否为null,然后判断地址是的相同
* 如果不相同则进行对象内容的判断,由于compare()方法接收本类引用,所以可以中窘境访问私有属性
* @param book1 要进行判断的依据
* @return 内存地址相同或者属性完全相同则返回true,否则返回false
*/
public boolean compare(Book1 book1){
if(book1==null){ //判断传入数据是否为null
return false;//没有必要进行具体的判断
}
if(this==book1){//比较内存地址是否相同
return true;//避免进行具体细节的比较,节约时间
}
if(this.title.equals(book1.title)&&this.price==book1.price){//判断属性是否相同
return true;
}else{
return false;
}
}
}
//定义测试类
public class TestDemo03 {
public static void main(String[] args) {
//实例化对象
Book1 a=new Book1("java",90);
Book1 b=new Book1("java",90);
//对象比较
if(a.compare(b)){
System.out.println("是同一个对象");
}else{
System.out.println("是不同的对象");
}
}
}
//程序运行结果为:是同一个对象
对象比较的操作有以下四个特点:
-
本类接收自己的引用,再与本类当前对象(this)进行比较
-
为了避免空指针异常的产生,应该增加一个null的判断
-
为了防止浪费性能的情况出现(要判断的属性会多),可以增加地址数值的判断,因为相同的对象地址相同
-
进行属性的依次比较,如果属性全部相同,则返回true,否则返回false
本文探讨如何在Java中实现自定义类的equals()方法,以确保对象间属性完全匹配,包括null检查、内存地址比较及属性逐一比较。通过实例演示了Book1类的比较操作和四个关键特性。
22万+

被折叠的 条评论
为什么被折叠?



