我的代码有问题,equals方法无效,我尝试了==
和.equals()
,但它无效。
这是main方法的代码:
x= new Card('♠',"number","3",5,Color.BLACK);
y= new Card('♠',"number","3",5,Color.BLACK);
if(x.equals(y)) System.out.println("True"); else System.out.println("False");
程序在屏幕上打印“False”。
这是我的卡类:
package core;
import java.awt.Color;
public class Card {
private char symbol;
private String type,value;
private int score;
private Color warna;
public Card(char symbol, String type, String value,int score,Color warna)
{
this.setSymbol(symbol);
this.setValue(value);
this.setType(type);
this.setScore(score);
this.warna = warna;
}
public char getSymbol() {
return symbol;
}
public void setSymbol(char symbol) {
this.symbol = symbol;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public Color getWarna() {
return warna;
}
public void setWarna(Color warna) {
this.warna = warna;
}
}
我该怎么办?
答案 0 :(得分:2)
这不是使用equals()
方法,而是测试2个实例的引用相等性:
if(x==y)
如果您想使用它,则需要调用equals()
方法。
更新:
equals()
测试无效,因为您没有覆盖默认的Object.equals()
方法,该方法仅测试引用相等性。
答案 1 :(得分:2)
在你的情况下:
右: if ( x.equals(y) )
错误: if ( x == y )
如果equals
API不起作用,那么您已在Card
课程中覆盖了它,并且您已将其实施错误。
如果你还没有覆盖它,那就去做吧:
public class Card
{
...
@Override
public boolean equals(final Object obj)
{
if ( obj == null || obj == this || !(obj instanceof Card) )
return false;
Card otherCard = (Card) obj;
if (otherCard.score != this.score) return false;
if (otherCard.symbol != this.symbol) return false;
if (!otherCard.warna.equals(this.warna)) return false;
if (!otherCard.type.equals(this.type)) return false;
if (!otherCard.value.equals(this.value)) return false;
return true;
}
}
答案 2 :(得分:0)
因为“==”仅检查x和y是否引用同一个对象。要检查它们是否相等,您希望覆盖Object
类中Card
类的Object.equals(Object)方法,然后执行if(x.equals(y))
而不是if(x == y)
}
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html
这是一个复杂的过程,但基本上你会想要......
@Override
boolean equals(Object obj)
{
if(this == obj) //Check if they're the same object
return true;
else if(!(obj instanceof Card)) //Check if it is not a Card
return false
else //Else...
Card other = (Card) obj;
/*Check if the variables are equal*/
}
答案 3 :(得分:0)
如果(x == y)仅在两个变量都指向同一个对象时才计算为真。
并且对于equals,你是否覆盖了equals方法?当你想要比较两个对象时,最好覆盖equals方法。
答案 4 :(得分:0)
默认情况下,equals()
方法继承自超类。如果你的类没有扩展任何类,那么它是从Object类继承的,所以它看起来像
public boolean equals(Object obj) {
return (this == obj);
}
所以现在它只检查你是否正在将你的对象与自身进行比较。在这种情况下,您需要覆盖此方法以检查您是否将对象与同一类(或派生类)的对象进行比较,比较比较对象的字段值。以下是此类实施的示例。
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || !(obj instanceof YourClass))
return false;
YourClass other = (YourClass) obj;
//if field1 is primitive type
if (field1 != other.field1)
return false;
//if field2 is object type
if (field2 == null || other.field2 != null)
return false;
else if (!field2.equals(other.field2))
return false;
//rest of fields
return true;
}