Java基础03-12_对象比较

Posted 徐伟的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础03-12_对象比较相关的知识,希望对你有一定的参考价值。

对象比较

如果说现在有两个数字要判断是否相等,可以使用“==”完成

如果是字符串要判断是否相等使用“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类对象
        Book b2 = new Book("Java开发", 79.8);// 实例化Book类对象
        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,而后判断地址是否相同,
     * 如果都不相同则进行对象内容的判断,由于compare()方法接收了本类引用,所以可以直接访问私有属性
     * @param book 要进行判断的数据
     * @return 内存地址相同、或者属性完全相同返回true,否则返回false
     */
    public boolean compare(Book book) {
        if (book == null) {     // 传入数据为null
            return false ;      // 没有必要进行具体的判断
        }
        // 执行“b1.compare(b2)”代码时会有两个对象:当前对象this(调用方法对象,就是b1引用); 传递的对象book(引用传递,就是b2引用)
        if (this == book) {     // 内存地址相同
            return true ;       // 避免进行具体细节的比较,节约时间
        }
        if (this.title.equals(book.title)
            && this.price == book.price) {  // 属性判断
            return true ;
        } else {    return false ;  }
    }// setter、getter略
}

以上是关于Java基础03-12_对象比较的主要内容,如果未能解决你的问题,请参考以下文章

Java基础__慕课网学习(25):Java第二季4.7 UML与PowerDesigner在Java设计中的应用,找了一篇比较好的博客,转载在这里

1-Java基础回顾整理_07_面向对象

Java 基础语法Java 对象的比较

编写高质量代码:改善Java程序的151个建议(第3章:类对象及方法___建议36~40)

Java基础系列--05_面向对象

Java基础:封装