-1

我在比较布尔值时遇到了一个问题,我希望循环进入块内部,但它没有进入块。

else if (!(keyCompare.contains(compareKey)) || (save == true)) {
 //do something
}

这里!(keyCompare.contains(compareKey)将返回 false。我正在查看向量 keyCompare 是否没有 compareKey 或者如果 save 为 true 然后进入 if 循环,但它没有。

我在哪里做错了?

4

2 回答 2

0

有三种可能:

  1. 上面的 if 或 else if 块正在执行。
  2. contains 抛出异常。
  3. 你错了,这两个条件都是错误的。

调试器会准确地告诉您哪种可能性是正确的。这里实际上没有任何讨论的必要——这实际上是仅有的三种可能性。

于 2012-08-01T22:19:38.450 回答
0

假设你有一个类如下:

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;
}
于 2016-05-12T01:48:30.540 回答