Java 比较应返回true,但返回false
我有两个相同类型的物体,然后我试着看它们是否相等,但它们似乎不相等,我真的不明白为什么会发生这种情况,我从屏幕上拍了一张照片,你们可以看到我想说的: (具有高分辨率) 这张图片是为了向你们展示到底发生了什么,甚至是去毛刺 以下是代码和类:Java 比较应返回true,但返回false,java,debugging,if-statement,comparison,Java,Debugging,If Statement,Comparison,我有两个相同类型的物体,然后我试着看它们是否相等,但它们似乎不相等,我真的不明白为什么会发生这种情况,我从屏幕上拍了一张照片,你们可以看到我想说的: (具有高分辨率) 这张图片是为了向你们展示到底发生了什么,甚至是去毛刺 以下是代码和类: private boolean checkForExpr(Type lowerExprType, Type upperExprType) { boolean result = false; if (lowerExprType == Type.u
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";
}
}
整型类
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";
}
}
您正在检查它是否是对同一对象的同一引用。根据你的调试器,它们不是。查看调试器中的(id=)字段。字符串“integer”具有相同的(id=)但您的两个类型对象不同 您需要实现equals和hashCode,然后检查内部对象属性,例如:
abstract public class Type {
@Override
public boolean equals(Object obj){
if (obj instanceof Type) {
return name.equals (((Type)obj).getName());
}
return false;
}
}
您可能应该检查空值等
查看此问题的答案您正在检查它是否是对同一对象的相同引用。根据你的调试器,它们不是。查看调试器中的(id=)字段。字符串“integer”具有相同的(id=)但您的两个类型对象不同 您需要实现equals和hashCode,然后检查内部对象属性,例如:
abstract public class Type {
@Override
public boolean equals(Object obj){
if (obj instanceof Type) {
return name.equals (((Type)obj).getName());
}
return false;
}
}
您可能应该检查空值等
检查这个问题的答案在line 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 IntegerType() {
super("integer");
}
}行内结果=(lowerExprType==UpperExprtType)您正在比较的是引用,而不是字符串
类型类别:
抽象公共类类型{
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");
}
}重写对象类的equals和hashCode方法。重写对象类的equals和hashCode方法。老实说,如果类型是
枚举,OP解决方案将非常有效!老实说,如果类型是enum
,OP解决方案将非常有效!