2012-05-31 113 views
0

我有两个对象具有相同的类型,然后我试图看看他们是否是平等的,但似乎他们不是,我真的不明白为什么这正在发生,我从屏幕上拍了一张照片,你们可以看到我想说什么:比较应该返回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"; 
    } 

} 

回答

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

你或许应该检查空值等

检查出这个问题的答案Override the equals method

+0

如果Type是一个'enum',那么OP解决方案将非常好用,非常诚实! – corsiKa

+0

@安德鲁非常感谢你。 –

0

行结果=(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"); 
} 

}

0

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

相关问题