0

我有两个相同类型的对象,然后我想看看它们是否相等,但似乎它们不是,我真的不明白为什么会这样,我从屏幕上拍了一张照片你们可以在哪里看到我想说的:

这里(高分辨率)。

这张图片是为了向你们展示真正发生的事情,即使是在调试。

这是代码和类:

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;
}

类型类

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;
}

整数类型类

public class IntegerType extends Type {

    public IntegerType() {
        super("integer");
    }

   public String getCname() {
      return "int";
   }

}
4

3 回答 3

6

您正在检查它是否是对同一对象的相同引用。根据您的调试器,它们不是。查看调试器中的 (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;
    }   
}

您可能应该检查空值等。

查看此问题的答案覆盖 equals 方法

于 2012-05-31T23:35:31.540 回答
0

在结果 = (lowerExprType == upperExprType) 行中,您正在比较引用而不是字符串。

类型类:

抽象公共类类型{

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 扩展类型 {

public IntegerType() {
    super("integer");
}

}

于 2012-05-31T23:40:27.400 回答
0

覆盖对象类的 equals 和 hashCode 方法。

于 2012-06-01T05:29:21.917 回答