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

问题描述

从我代码的第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字符串索引超出范围:8(第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;
}

谢谢!

解决方法

表达式从左到右评估,并带有短路。这意味着当对表达式a && b求值并且a求值为false时,整个表达式的求值为false,而无需执行b

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

,

是的,确定订单很重要。像这样的if语句 (i + 2