Phone类:
package com.msb.text02; public class Phone { //属性: private String brand; private double price; private int year; public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } //方法: @Override public String toString() { return "Phone{" + "brand='" + brand + '\'' + ", price=" + price + ", year=" + year + '}'; } //对equals方法进行重写 public boolean equals(Object obj) { //将obj转为Phone类型: Phone other = (Phone)obj; if(this.getBrand()== other.getBrand()&&this.getPrice()==other.getPrice()&&this.getYear()==other.getYear()){ return true; } return false; } //构造器: public Phone() { } public Phone(String brand, double price, int year) { this.brand = brand; this.price = price; this.year = year; } }
Test类:
package com.msb.text02; public class Test { public static void main(String[] args) { Phone p1 = new Phone("华为p40",5000,2020); Phone p2 = new Phone("华为p40",5000,2020); //比较两个对象:p1和p2对象: //==的作用:比较左右两侧的值是否相等,要么相等,返回true,要么不相等,返回false System.out.println(p1==p2);//---》对于引用数据类型来说,比较的是地址值。 //Object类提供了一个方法equals方法:作用:比较对象具体内容是否相等 boolean equals = p1.equals(p2);//点进源码发现:底层依旧是==,比较的还是地址值 System.out.println(equals); } }
总结:
equals方法作用:这个方法提供了对对象的内容是否相等的一个比较方式,对象的内容指的就是属性。
父类Object提供的equals就是比较==地址,没有实际的意义,我们一般不会使用父类提供的方法,
而是在子类中对这个方法进行重写。
对代码的优化:
instanceof:
public boolean equals(Object obj) { /* instanceof 运算符: a instanceof b: 判断a对象是否是b这个类的实录,如果是,则返回true,如果不是返回false */ if(obj instanceof Phone){//属于Phone类的对象 Phone other = (Phone)obj; if(this.getBrand()== other.getBrand()&&this.getPrice()==other.getPrice()&&this.getYear()==other.getYear()){ return true; } //将obj转为Phone类型: } return false; }
利用集成开发工具生成equals:
【1】利用eclipse:
【2】利用idea
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Phone phone = (Phone) o; return Double.compare(phone.price, price) == 0 && year == phone.year && Objects.equals(brand, phone.brand); }