为什么在我的 java 代码中等于 returns false?
Why equals returns false in my java code?
我不明白为什么我的代码中 equals() returns 是“false”而不是“true”?
class Location {
private int x, y;
public Location(int x, int y) {
this.x = x;
this.y = y;
}
}
public class App {
public static void main(String[] args) {
Location a = new Location(1, 2); //
Location b = new Location(1, 2); // same values
System.out.println(a.equals(b)); // result : "false"
}
}
如何比较两个对象的值?
用这个覆盖基础 'equals' 方法:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Location that = (Location) o;
return x.equals(that.x) &&
y.equals(that.y);
}
此方法在对象 class 中定义,因此每个 Java 对象都继承它。默认情况下,它的实现比较对象内存地址,因此它的工作方式与 == 运算符相同。但是,我们可以覆盖此方法以定义相等对我们的对象意味着什么。
您应该为此 class 重写重写 equals() 方法,以便我们可以根据两个位置的内部详细信息比较两个位置:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Location that = (Location) o;
return x.equals(that.x) &&
y.equals(that.y);
}
覆盖equals()
方法就像例行公事。您可以使用 IDE 工具生成 equals()
和 hashcode()
方法。
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Location other = (Location) obj;
if (!getEnclosingInstance().equals(other.getEnclosingInstance()))
return false;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}
我不明白为什么我的代码中 equals() returns 是“false”而不是“true”?
class Location {
private int x, y;
public Location(int x, int y) {
this.x = x;
this.y = y;
}
}
public class App {
public static void main(String[] args) {
Location a = new Location(1, 2); //
Location b = new Location(1, 2); // same values
System.out.println(a.equals(b)); // result : "false"
}
}
如何比较两个对象的值?
用这个覆盖基础 'equals' 方法:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Location that = (Location) o;
return x.equals(that.x) &&
y.equals(that.y);
}
此方法在对象 class 中定义,因此每个 Java 对象都继承它。默认情况下,它的实现比较对象内存地址,因此它的工作方式与 == 运算符相同。但是,我们可以覆盖此方法以定义相等对我们的对象意味着什么。
您应该为此 class 重写重写 equals() 方法,以便我们可以根据两个位置的内部详细信息比较两个位置:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Location that = (Location) o;
return x.equals(that.x) &&
y.equals(that.y);
}
覆盖equals()
方法就像例行公事。您可以使用 IDE 工具生成 equals()
和 hashcode()
方法。
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Location other = (Location) obj;
if (!getEnclosingInstance().equals(other.getEnclosingInstance()))
return false;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}