我有两个相同类型的物品,然后我试图看他们是否相等,但似乎他们不是,我真的不明白为什么这种情况正在发生,我从屏幕上拍了一张照片,你们可以看到我想说的话:
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;
}
输入课程
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";
}
}
答案 0 :(得分:6)
您正在检查它是否与同一对象的引用相同。根据你的调试器,他们不是。查看调试器中的(id =)字段。字符串“integer”具有相同的(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
答案 1 :(得分:0)
在line result =(lowerExprType == upperExprType)中,您要比较引用而非String。
键入类:
抽象公共类类型{
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");
}
}
答案 2 :(得分:0)
覆盖对象类的equals和hashCode方法。