0

同じタイプのオブジェクトが2つあり、それらが等しいかどうかを確認しようとしていますが、そうではないようです。なぜこれが発生するのかよくわかりません。画面から写真を撮りました。皆さんは私が言おうとしていることを見ることができます:

ここ(高解像度)。

画像は、デバグでさえ実際に何が起こっているかを皆さんに示すためのものです。

コードとクラスは次のとおりです。

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

IntegerTypeクラス

public class IntegerType extends Type {

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

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

}
4

3 に答える 3

6

同じオブジェクトへの同じ参照であるかどうかを確認しています。あなたのデバッガによれば、そうではありません。デバッガーの (id=) フィールドを見てください。String "integer" は同じ (id=) ですが、2 つの 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

オブジェクト クラスの equals メソッドと hashCode メソッドをオーバーライドします。

于 2012-06-01T05:29:21.917 に答える
0

行 result = (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 class IntegerType extends Type {

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

}

于 2012-05-31T23:40:27.400 に答える