if语句3"和" (&&)运算符在重新排列时会导致错误

时间:2016-12-13 18:14:35

标签: java operators

有人可以向我解释为什么当我重新排列以下if语句中的条件时,它会抛出一个StringIndexOutOfBoundsException,或者它没有;

public int matchUp(String[] a, String[] b) {
int count = 0;

for (int i = 0; i < a.length; i++) {
  if (a[i].length() > 0 && b[i].length() > 0 &&
      a[i].charAt(0) == b[i].charAt(0)) {
      count++;
  }
}
   return count;
}

基本上我的问题是,这个if语句是怎样的

if (a[i].charAt(0) == b[i].charAt(0) &&
    a[i].length() > 0 && b[i].length() > 0)

与此if语句不同

if (a[i].length() > 0 && b[i].length() > 0 &&
    a[i].charAt(0) == b[i].charAt(0)) {
      count++;
}

第一个引发异常,例如:

matchUp(["", "", "ccc"], ["aa", "bb", "cc"]) → 1    

例外:

java.lang.StringIndexOutOfBoundsException: String index out of range: 0 (line number:6)

1 个答案:

答案 0 :(得分:0)

Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: 0 (line number:6)

表示您尝试访问数组为空的索引0。

另一件事是,当expression1 && expression2为假时,表达式expression1被评估为false。没有尝试评估表达式。