我正在使用==
运算符比较2个Java对象,有人可以解释为什么打印“ b”是而不是“ a”吗?
public class punktAusfuehren {
Punkt p1 = new Punkt(19, 10);
Punkt p2 = new Punkt(5, 0);
public static void main(String[] args) {
new punktAusfuehren();
}
public punktAusfuehren() {
if (p1 == p2) {
System.out.println("a");
} else {
System.out.println("b");
}
if (p1 instanceof Punkt) {
System.out.println("c");
} else {
System.out.println("d");
}
}
}
答案 0 :(得分:5)
因为它们具有不同的引用。如果两个对象是否被同一引用引用,AMAZON.NoIntent
给出引用相等,要比较两个对象,请使用==
方法。像
检查两个对象是否相等,但是必须重写equals
和equals
方法来定义相等性
hashCode
示例p1.equals(p2) //
类可能看起来像这样:
Point
编辑:
对于对象比较,将等于(public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
// accessors omitted for brevity
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Point point = (Point) o;
return x == point.x && y == point.y;
}
@Override
public int hashCode() {
return Objects.hash(x, y);
}
}
)运算符应用于对对象的引用,而不是对它们所指向的对象的引用。当且仅当两个引用指向同一个对象,或者两个引用都指向null时,两个引用才相等。请参见以下示例:
==
答案 1 :(得分:2)
在Java中,==
运算符将通过比较对象的内存位置而不是实际值来确定对象之间的等效性。例如,在比较字符串时,您可以使用stringA.equals(stringB)
来比较实际值。
要比较对象值,您将需要采用类似的方法并在public boolean equals(Object o)
类内部重写Punkt
方法
答案 2 :(得分:1)
==
比较两个对象引用而不是其实际值,它检查两个变量是否指向同一对象。
如果要比较对象,则需要使用equals()
之类的p1.equals(p2)
方法。
答案 3 :(得分:1)
在Java中,如果在两个对象之间使用'=='运算符,它将检查两个对象是否使用相同的地址。 每次调用“ new”操作时,都会创建一个具有新地址的对象。 在您的代码中,p1和p2都是具有新地址的对象,因此'=='运算符返回false。