比较布尔值

时间:2012-05-14 14:11:20

标签: java boolean boolean-logic

我在比较布尔值时面临一个问题,我希望循环进入块内但不进入块。

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

此处!(keyCompare.contains(compareKey)将返回false。我看到向量keyCompare没有compareKey或者如果save为true则输入if循环,但不是。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

有三种可能性:

  1. 此上面的if或else if块正在执行。
  2. 包含抛出异常。
  3. 你错了,这两个条件都是假的。
  4. 调试器会告诉您确切的可能性。这里没有任何讨论的必要 - 这些只是三种可能性。

答案 1 :(得分: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;
}