如果有两个数字判断相等,则可以用“==”;如果是字符串要判断相等,可以使用内置方法equals();如果有一个自定义的类,要想判断他的两个对象是否相等,则必须要实现类对象中所有属性内容的比较
例.基础的比较方式
class Book{
private String title;
private double price;
public Book(String title,double price){
this.title = title;
this.price = price;
}
public String getTitle(){
return this.title;
}
public double getPrice(){
return this.price;
}
}
public class TestDemo{
public static void main(String args[]){
Book b1 = new Book("Java开发",79.8);
Book b2 = new Book("Java开发",79.8);
if(b1.getTitle().equals(b2.getTitle())
&& b1.getPrice()==b2.getPrice()){
System.out.println("是同一个对象");
}else{
System.out.println("不是同一个对象");
}
}
}
是同一个对象
本程序确实实现了两个对象的比较操作,但是采用了第三方完成了判断,很明显不合适,这种比较的操作应该由本类完成
例.对象比较实现
class Book{
private String title;
private double price;
public Book(String title,double price){
this.title = title;
this.price = price;
}
/**
* 进行本类对象的比较操作,在比较过程中首先判断传入的对象是否为null,然后判断地址是否相同
* @return 内存地址相同则返回true,否则返回false
*/
public boolean compare(Book book){
if(book == null){
return false;
}
//执行b1.compare(b2)时会有两个对象
//当前对象this(调用方法对象,就是b1引用)
//传递的对象book(引用传递,就是b2引用)
if (this.title.equals(book.title)
&& this.price == book.price){
return true;
}else{
return false;
}
}
public String getTitle(){
return this.title;
}
public double getPrice(){
return this.price;
}
}
public class TestDemo{
public static void main(String args[]){
Book b1 = new Book("Java开发",79.8);
Book b2 = new Book("Java开发",79.8);
if(b1.compare(b2)){
System.out.println("是同一个对象");
}else{
System.out.println("不是同一个对象");
}
}
}
是同一个对象
本程序直接在Book类的内部定义一个compare()的方法,其功能就是比较对象是否相等,可以发现对象比较的操作有如下四个特点:
- 本类接收自己的引用,再与本类当前对象(this)进行比较;
- 为了避免NullPointerException的产生,应该增加一个null的判断;
- 为了防止浪费性能的情况出现(要判断的属性会多),可以增加地址数值的判断;
- 进行属性的依次比较,如果属性完全相同,则返回true,否则返回false