[英]What Is The Difference Between .equals() and ==?
我读到.equals()比较对象的值,而==比较引用(即-变量所指向的内存位置)。 参见此处: Java中==与equals()之间有什么区别?
但是请注意以下代码:
package main;
public class Playground {
public static void main(String[] args) {
Vertex v1 = new Vertex(1);
Vertex v2 = new Vertex(1);
if(v1==v2){
System.out.println("1");
}
if(v1.equals(v2)){
System.out.println("2");
}
}
}
class Vertex{
public int id;
public Vertex(int id){
this.id = id;
}
}
输出:
(没有)
不应该打印2吗?
您需要为Vertex
类实现自己的.equals()
方法。
默认情况下,您使用的是Object.equals
方法。 在文档中,这就是它的作用:
类Object的equals方法在对象上实现了最有区别的对等关系。 也就是说,对于任何非空参考值x和y,当且仅当x和y引用同一个对象(x == y的值为true)时,此方法才返回true。
您可以执行以下操作:
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj.getClass() != getClass()) return false;
Vertex other = (Vertex)obj;
return (this.id == other.id);
}
您需要重写equals()
的默认实现。 默认实现是Object#equals()
:
public boolean equals(Object obj) {
return (this == obj);
}
覆盖的版本将如下所示:
@Override
public boolean equals(Object obj)
{
if(obj == this) return true;
if(obj == null) return false;
if(obj.getClass() != getClass()) return false;
return ((Vertex) obj).id == this.id;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.