为什么这不可能?我开始表达非法行为。
(s1.charAt(i) == ' ') ? i++ : break;
答案 0 :(得分:24)
这里要理解的是?:运算符用于返回值。你基本上是在这一行调用一个看起来像这样的函数:
anonymous function:
if(s1.charAt(i) == ' '):
return i++;
else:
return break;
没有意义,对吧? ?:运算符仅设计为if / else返回语句的简写,如上所述,而不是替换if / else。
答案 1 :(得分:13)
您不能在三元条件表达式的一部分中使用break
,因为break
不是表达式本身,而只是一个控制流语句。
为什么不使用if-else结构呢?
if (s1.charAt(i) == ' ') {
i++;
} else {
break;
}
答案 2 :(得分:4)
三元运算符是表达式,而不是语句。请使用if ... else ...
。
答案 3 :(得分:3)
当然有效。但它是一个运营商。从什么时候开始,如'break'是一个操作数?
答案 4 :(得分:2)
我建议避免使用三元(?:)运算符EXCEPT进行简单赋值。在我的职业生涯中,我见过太多疯狂的嵌套三元运算符;它们成为一种维持头痛(更多的认知过载 - “不要让我思考!”)。
我不会禁止他们加入我的团队,但建议明智地使用它们。仔细使用它们比相应的if / else结构更清晰: -
public int ifFoo() {
int i;
if( isSomethingTrue()) {
i = 5;
}
else {
i = 10;
}
return i;
}
与三元替代方案相比: -
public int ternaryFoo() {
final int i = isSomethingTrue()
? 5
: 10;
return i;
}
三元版本是: -