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;
}
三元版本是:-

  • 短的
  • 更容易理解(当然是我的观点!)
  • 允许变量为“最终”;简化了代码理解;在一个更复杂的方法中,阅读代码的人知道没有更多的代码会尝试修改变量——一件不必担心的事情

如果将它放在[while,for,w/e]循环中,它是否工作?
返回isSomethingTrue()?5 : 10;比10行if语句和那个无用的局部变量干净多了。我只把局部变量放进去,这样我就可以在需要调试时在那一行上设置断点。不管怎样,都不要太大惊小怪!实际上,变量可以是最终变量,只要在使用之前通过所有代码路径分配。