gpt4 book ai didi

java - 在 Java 中覆盖 equals()

转载 作者:行者123 更新时间:2023-12-02 05:52:10 26 4
gpt4 key购买 nike

我试图了解“equals()”在 Java 中的工作原理。特别是与“toString()”相比。这是一个让我偏离正轨的例子。


public class Car
{
String make, model;

public Car( String model, String make )
{
this.make = model;
this.model = make;
}

public String toString()
{
String str = "This is a car. ";
str += "Make: " + make + " | Model: " + model;
return str;
}

public boolean equals( Car c )
{
return ( make.equals( c.make ) && model.equals( c.model ) );
}
}

public class Node 
{
protected Object obj;
protected Node next;

public Node( Object o )
{
this.obj = o;
this.next = null;
}

public String toString()
{
return obj.toString();
}

public boolean equals( Node n )
{
return ( this.obj.equals( n.obj ) );
}
}

Car c1 = new Car("toyota", "corolla");
Car c2 = new Car("toyota", "corolla");

Node nC1 = new Node( c1 );
Node nC2 = new Node( c2 );

nC1.print();
nC2.print();


if( nC1.equals( nC2 ) )
System.out.println("They are equal!");
else
System.out.println("They are NOT equal!");

此处 nC1.print() 和 nC2.print() 的行为符合预期。打印:

This is a car. Make: toyota | Model: corolla
This is a car. Make: toyota | Model: corolla

然而nC1.equals( nC2 ), 打印:

"They are NOT equal!"

简而言之,问题是我可以覆盖“toString()”,但不能覆盖“equals()”。我错过了什么?我想对此行为有一个简单的解释。

最佳答案

我认为您应该将方法的签名保留为:

public boolean equals(Object obj)

作为旁注:@Override 注释放在您要覆盖的方法中,以确保您覆盖的是正确的方法,否则编译器会报错。

关于java - 在 Java 中覆盖 equals(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11661004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com