1 package com.msb7;
 2 
 3 public class Phone {
 4     private String brand;
 5     private double price;
 6     private int year;
 7 
 8     public String getBrand() {
 9         return brand;
10     }
11 
12     public void setBrand(String brand) {
13         this.brand = brand;
14     }
15 
16     public double getPrice() {
17         return price;
18     }
19 
20     public void setPrice(double price) {
21         this.price = price;
22     }
23 
24     public int getYear() {
25         return year;
26     }
27 
28     public void setYear(int year) {
29         this.year = year;
30     }
31 
32     public Phone() {
33     }
34 
35     public Phone(String brand, double price, int year) {
36         this.brand = brand;
37         this.price = price;
38         this.year = year;
39     }
40 
41     @Override
42     public String toString() {
43         return "Phone{" +
44                 "brand='" + brand + '\'' +
45                 ", price=" + price +
46                 ", year=" + year +
47                 '}';
48     }
49 
50     public boolean equals(Object obj) {
51         /*
52         instanceof运算符;
53         a instanceof b:
54         判断a对象是否是b这个类的实例,如果是,返回true,如果不是返回false
55          */
56         if(obj instanceof Phone){//属于Phone类的对象
57             //将obj转为Phone类型:
58             Phone other = (Phone)obj;
59             if(this.getBrand()==other.getBrand()&&this.getPrice()==other.getPrice()&&this.getYear()==other.getYear()){
60                 return true;
61             }
62         }
63         return false;
64 
65     }
66 }

 

//cat类
1 package com.msb7;
2 
3 public class Cat {
4 }
1 package com.msb7;
 2 //测试类
 3 public class Test {
 4     public static void main(String[] args) {
 5         Phone p1 = new Phone("荣耀v30pro",3076.98,2019);
 6         Phone p2 = new Phone("荣耀v30pro",3076.98,2019);
 7         //比较两个对象:p1和p2对象:
 8         //==的作用:比较左右两侧的值是否相等,要么相等,返回true,不想等,返回false;
 9         System.out.println(p1==p2); //--->>对于引用数据类型来说,比较的是地址值,返回的一定是false
10 
11         //object 类提供了一个方法equals方法:作用:比较对象具体的内容是否相等。
12         boolean flag = p1.equals(p2);//点击源码发现:底层依旧比较的是==,比较的还是地址值。
13         System.out.println(flag);//返回true
14 
15 
16 
17         Cat c = new Cat();
18         boolean  flag1 = p1.equals(c);
19         System.out.println(flag1);  //返回false
20     }
21 }
22 /*equals作用:提供了对对象的内容是否相等的一个比较方式,对象的内容指的就是属性,
23 父类Object提供的equals就是在比较==地址,没有实际的意义,一般不会直接使用父类提供的方法,
24 而是在子类中对这个方法进行重写。*/

 //elipse生成equals方法

面向对象_Object类的equals方法_System

 

 

1 //利用IDE生成equals方法
 2     @Override
 3     public boolean equals(Object o) {
 4         if (this == o) return true;
 5         if (o == null || getClass() != o.getClass()) return false;
 6         Phone phone = (Phone) o;
 7         return Double.compare(phone.price, price) == 0 && year == phone.year && Objects.equals(brand, phone.brand);
 8     }
 9 
10     @Override
11     public int hashCode() {
12         return Objects.hash(brand, price, year);
13     }
14 }