用对象重写Java中的equals方法



我目前正在练习面向对象编程,偶然发现在程序中使用Override。在这里,我想覆盖类Car中的equals方法,并使用ONLY plateNumber来确定Car是否相同(equal(。

虽然它给出了所需的输出,但它没有使用布尔结果。我不得不使用CharSequence来比较它。在这种情况下,我如何使用字符串比较?

class Car {
private String make;
private String model;
private String plateNumber;
private int horsePower;
public Car(String make, String model, String plateNumber, int horsePower) {
this.make = make;
this.model = model;
this.plateNumber = plateNumber;
this.horsePower = horsePower;
}

public String getMake() {
return make;
}
public void setMake(String make) {
this.make = make;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getPlateNumber() {
return plateNumber;
}
public void setPlateNumber(String plateNumber) {
this.plateNumber = plateNumber;
}
public int getHorsePower() {
return horsePower;
}
public void setHorsePower(int horsePower) {
this.horsePower = horsePower;
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Car))
return false;

Car that = (Car) o;
return CharSequence.compare(plateNumber, that.plateNumber) == 0;
}
}
class Main {
public static void main(String args[]) {
Car car1 = new Car("Toyota", "RAV4", "ABC-123", 104);
Car car2 = new Car("Renault", "Megane", "DEF-789", 132);
Car car3 = new Car("Ford", "Mondeo", "GHI-012", 132);
Car car4 = new Car("Mercedes", "C180", "ABC-123", 144);

if (car1.equals(car4)) {
System.out.println("Equal ");
} else {
System.out.println("Not Equal ");
}
boolean result = car1.equals(car4);// this should return true because the plateNumbers are the same
result = car1.equals(car2); // this should return false because the plateNumbers don't match
}
}

Java中的每个对象都有hashCode()方法,该方法返回一个int(对象的表示(。

在您的情况下,您想比较licencePlate哈希代码,如:

@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Car))
return false;
Car that = (Car) o;
return Objects.equals(this.hashCode(), that.hashCode());
}
@Override
public int hashCode() {
return this.plateNumber.hashCode();
}

现在要比较不同的字段,你需要素数(这篇文章清楚地解释了为什么(

@Override
public int hashCode() {
int prime = 31; //Prime1
int hash = 7; //Prime2
hash = prime * hash + (int) id;
hash = prime * hash + (plateNumber == null ? 0 : plateNumber.hashCode());
hash = prime * hash + (make == null ? 0 : make .hashCode());
return hash;
}

有用的链接(Baeldung教程(

您可以像这样覆盖equals类:

@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Car))
return false;

Car that = (Car) o;
return this.plateNumber.equals(that.plateNumber);
}

您必须使用

@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Car))
return false;

Car that = (Car) o;
return this.plateNumber.equals(that.plateNumber);
}

您只需执行plateNumber.equals(that.plateNumber)

package Lesson9.streamandoperations;
import java.util.Objects;
class Car {
private String make;
private String model;
private String plateNumber;
private int horsePower;
public Car(String make, String model, String plateNumber, int horsePower) {
this.make = make;
this.model = model;
this.plateNumber = plateNumber;
this.horsePower = horsePower;
}

public String getMake() {
return make;
}
public void setMake(String make) {
this.make = make;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getPlateNumber() {
return plateNumber;
}
public void setPlateNumber(String plateNumber) {
this.plateNumber = plateNumber;
}
public int getHorsePower() {
return horsePower;
}
public void setHorsePower(int horsePower) {
this.horsePower = horsePower;
}

@Override
public int hashCode() {
return Objects.hash(plateNumber);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Car other = (Car) obj;
if (plateNumber == null) {
if (other.plateNumber != null)
return false;
} else if (!plateNumber.equals(other.plateNumber))
return false;
return true;
}
//    @Override
//    public boolean equals(Object o) {
//
//        if (o == this)
//            return true;
//
//        if (!(o instanceof Car))
//            return false;
//
//
//        Car that = (Car) o;
//
//        return CharSequence.compare(plateNumber, that.plateNumber) == 0;
//    }

}
class Main {
public static void main(String args[]) {
Car car1 = new Car("Toyota", "RAV4", "ABC-123", 104);
Car car2 = new Car("Renault", "Megane", "DEF-789", 132);
Car car3 = new Car("Ford", "Mondeo", "GHI-012", 132);
Car car4 = new Car("Mercedes", "C180", "ABC-123", 144);

if (car1.equals(car4)) {
System.out.println("Equal ");
} else {
System.out.println("Not Equal ");
}
boolean result = car1.equals(car4);// this should return true because the plateNumbers are the same
result = car1.equals(car2); // this should return false because the plateNumbers don't match
}
}

最新更新