繁体   English   中英

.equals()和==有什么区别?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM