[英]Overriding the equals method in Java with objects
我目前正在練習面向對象編程,並且偶然發現在我的程序中使用 Override。 在這里,我想覆蓋類 Car 中的 equals 方法並使用 ONLY plateNumber 來確定 Car 是否相同(相等)。
盡管它提供了所需的輸出,但它沒有使用布爾結果而且我不得不使用 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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.