?运算符不起作用

时间:2010-10-23 07:53:34

标签: java operators

为什么这不可能?我开始表达非法行为。

(s1.charAt(i) == ' ') ? i++ : break;

5 个答案:

答案 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;
}

三元版本是: -

  • 更短的
  • 更容易理解(我的意见,当然!)
  • 允许变量为“final”;这简化了代码理解;在一个更复杂的方法中,有人阅读代码知道没有其他代码可以尝试修改变量 - 一件事情不用担心。