Java 中的逻辑或显示意外结果

Logical OR in Java shows unexpected results

这是我的代码:

Scanner s = new Scanner(System.in);
int t = s.nextInt();
String [] pair_left = new String[t];
String [] pair_right = new String[t];

for (int i = 0; i < t; i++) {
    pair_left[i] = s.next();
    pair_right[i] = s.next();
}
HashSet hs1=new HashSet();
HashSet hs2=new HashSet();
int j=0;
for(int i=0;i<t;i++){
    if(hs1.add(pair_left[i])||hs2.add(pair_right[i])){
      j++;
      System.out.println(j);
    }
    else {      
       System.out.println(j);
    }
}

并且输入是:

5
john tom
john mary
john tom
mary anna
mary anna

现在 i=2 然后 hs1.add(pair_left[i]) return 为假然后它转到 hs2.add(pair_right[i]) 这也 return 'false' 所以 hs1.add(pair_left[i])||hs2.add(pair_right[i]) 应该 return 'false' 但在我的例子中它显示 true。为什么?

当我用按位或替换逻辑或时,它显示了正确的结果。 如果有更好的方法来做这个,那么也给那个。

您应该知道 || 逻辑 OR 是短路的,因此如果 hs1.add(pair_left[i]) returns 为真,则不会计算 hs2.add(pair_right[i])

另一方面,正如您所注意到的,当您使用 | 时,它是非短路逻辑或(请注意 | 不仅是 按位或), 两个操作数总是计算。