Java ? 操作员不工作
为什么这是不可能的?我得到了非法的开始表达Java ? 操作员不工作,java,operators,Java,Operators,为什么这是不可能的?我得到了非法的开始表达 (s1.charAt(i) == ' ') ? i++ : break; 三元运算符是表达式,而不是语句。如果。。。否则…用于此。不能在三元条件表达式的一部分中使用break,因为break不是表达式本身,而是控制流语句 为什么不使用if-else构造呢 if (s1.charAt(i) == ' ') { i++; } else { break; } 这里需要理解的是,?:运算符用于返回值。您基本上是在调用一个函数,该函数在该行中
(s1.charAt(i) == ' ') ? i++ : break;
三元运算符是表达式,而不是语句。如果。。。否则…用于此。不能在三元条件表达式的一部分中使用
break
,因为break
不是表达式本身,而是控制流语句
为什么不使用if-else构造呢
if (s1.charAt(i) == ' ') {
i++;
} else {
break;
}
这里需要理解的是,?:运算符用于返回值。您基本上是在调用一个函数,该函数在该行中如下所示:
anonymous function:
if(s1.charAt(i) == ' '):
return i++;
else:
return break;
没道理,对吧??:运算符仅被设计为上述if/else返回语句的简写形式,而不是完全替代if/else。当然可以。但它是一个接线员。因为像“break”这样的语句什么时候是操作数?我建议除了简单赋值之外,不要使用三元(?:)运算符。在我的职业生涯中,我见过太多疯狂的嵌套三元运算符;他们成为一个维护头痛(更多的认知超载——“不要让我思考!”) 我不禁止在我的团队中使用它们,但建议明智地使用它们。小心使用,它们比相应的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;
}
三元版本是:-
- 短的
- 更容易理解(当然是我的观点!)
- 允许变量为“最终”;简化了代码理解;在一个更复杂的方法中,阅读代码的人知道没有更多的代码会尝试修改变量——一件不必担心的事情
返回isSomethingTrue()?5 : 10;代码>比10行if语句和那个无用的局部变量干净多了。我只把局部变量放进去,这样我就可以在需要调试时在那一行上设置断点。不管怎样,都不要太大惊小怪!实际上,变量可以是最终变量,只要在使用之前通过所有代码路径分配。