if 语句中状态的顺序重要吗?

Does order of the states in the if statement matter?

从我的代码的第 5 行开始,

if (i + 2 < str.length() && str.charAt(i) == 'y' && str.charAt(i + 2) == 'k')

语句的顺序重要吗?我想知道因为

当我分配 str = "yak123ya"

(i + 2 < str.length() && str.charAt(i) == 'y' && str.charAt(i + 2) == 'k') 工作得很好 但是

(str.charAt(i) == 'y' && str.charAt(i + 2) == 'k' && i + 2 < str.length()) 原因

错误

StringIndexOutOfBoundsException: String index out of range: 8 (line:5)

public String stringYak(String str) {
  String result = "";

  for (int i = 0; i < str.length(); i++) {
    if (i + 2 < str.length() && str.charAt(i) == 'y' && str.charAt(i + 2) == 'k') {
      i += 2;
    } else {
      result += str.charAt(i);
    }
  }
  return result;
}

谢谢!!

表达式从左到右求值,short-circuiting。这意味着当计算表达式 a && b 并且 a 计算为 false 时,整个表达式计算为 false 而不执行 b.

在这种情况下,当i = 6时,i + 2 < str.length()false,因此不会执行charAt(6)(因此不会抛出异常)。

是的,订单很重要。就像在这个 if 语句中一样 (i + 2 < str.length() && str.charAt(i) == 'y' && str.charAt(i + 2) == 'k') 如果第一个条件 i + 2 < str.length() 为假,它不会检查第二个条件 str.charAt(i) == 'y' 所以它不会抛出 StringIndexOutOfBoundsException