我在比较布尔值时遇到了一个问题,我希望循环进入块内部,但它没有进入块。
else if (!(keyCompare.contains(compareKey)) || (save == true)) {
//do something
}
这里!(keyCompare.contains(compareKey)
将返回 false。我正在查看向量 keyCompare 是否没有 compareKey 或者如果 save 为 true 然后进入 if 循环,但它没有。
我在哪里做错了?
我在比较布尔值时遇到了一个问题,我希望循环进入块内部,但它没有进入块。
else if (!(keyCompare.contains(compareKey)) || (save == true)) {
//do something
}
这里!(keyCompare.contains(compareKey)
将返回 false。我正在查看向量 keyCompare 是否没有 compareKey 或者如果 save 为 true 然后进入 if 循环,但它没有。
我在哪里做错了?
有三种可能:
调试器会准确地告诉您哪种可能性是正确的。这里实际上没有任何讨论的必要——这实际上是仅有的三种可能性。
假设你有一个类如下:
static class Contents {
private String contents;
public Contents(String contents) {
this.contents = contents;
}
}
编写以下代码:
Vector<Contents> v = new Vector<>();
v.add(new Contents("a"));
System.out.println("Contains a: "+v.contains(new Contents("a")));
将产生以下输出:
Contains a: false
但是将equals
方法添加到Contents
类中,如下所示:
public boolean equals(Object obj) {
return Objects.equals(this.contents, ((Contents)obj).contents);
}
突然产生以下结果:
Contains a: true
更好的实现可能如下所示:
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass())return false;
final Contents other = (Contents) obj;
if (!Objects.equals(this.contents, other.contents))return false;
return true;
}