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
从我的代码的第 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