比较应该返回true,但返回false
问题描述:
我有两个对象具有相同的类型,然后我试图看看他们是否是平等的,但似乎他们不是,我真的不明白为什么这正在发生,我从屏幕上拍了一张照片,你们可以看到我想说什么:比较应该返回true,但返回false
here(高分辨率)。
该图像是为了向你们展示真正发生的甚至是破坏的事情。
下面的代码和类:
private boolean checkForExpr(Type lowerExprType, Type upperExprType) {
boolean result = false;
if (lowerExprType == Type.undefinedType || upperExprType == Type.undefinedType){
return false;
}else{
result = (lowerExprType == upperExprType);
}
return result;
}
Type类
abstract public class Type {
public Type(String name) {
this.name = name;
}
public static Type booleanType = new BooleanType();
public static Type integerType = new IntegerType();
public static Type charType = new CharType();
public static Type undefinedType = new UndefinedType();
public String getName() {
return name;
}
abstract public String getCname();
private String name;
}
IntegerType类
public class IntegerType extends Type {
public IntegerType() {
super("integer");
}
public String getCname() {
return "int";
}
}
答
要检查,看它是否是相同的参照同目的。根据你的调试器,他们不是。查看调试器中的(id =)字段。字符串“整数”具有相同的(id =),但您的两个Type对象不同。
您需要实现equals和hashCode,然后检查内部对象的属性,如本:
abstract public class Type {
@Override
public boolean equals(Object obj){
if (obj instanceof Type) {
return name.equals (((Type)obj).getName());
}
return false;
}
}
你或许应该检查空值等
检查出这个问题的答案Override the equals method
答
行结果=(lowerExprType == upperExprType)您比较引用不是字符串。
Type类:
抽象公共类类型{
public Type(String name) {
this.name = name;
}
public static Type booleanType = new BooleanType();
public static Type integerType = new IntegerType();
public static Type charType = new CharType();
public static Type undefinedType = new UndefinedType();
@Override
public String toString() {
return name;
}
private String name;
}
IntegerType类:
公共类IntegerType延伸类型{
public IntegerType() {
super("integer");
}
}
答
覆盖对象类的equals和hashCode方法。
如果Type是一个'enum',那么OP解决方案将非常好用,非常诚实! – corsiKa
@安德鲁非常感谢你。 –