2

我知道你可以在 Java 中使用这样的东西:

(a > b) ? a : b;

没有其他部分是否有类似的东西?

4

3 回答 3

13

它是一个表达式,而不是一个语句,这意味着它总是会计算出一些东西。如果没有“其他部分”,那么如果测试为假,则表达式将没有任何东西可以评估。所以,不,没有 else 就没有类似的东西了。

我喜欢使用条件运算符的一点是你可以分配类似的东西

foo =  a > b ? c : d;

并且阅读它你知道 foo 得到了分配给它的东西,无论测试是否正确。因此,它为您提供了一种方法来指示分配的值取决于某些测试。

Groovy 有一些类似的运算符:

?:,Elvis 运算符,如果左侧的表达式为空,则将右侧的值分配为默认值。

?.,安全空运算符,如果左侧计算结果为 null,则计算结果为 null。这对于您有一系列可能为空的事物的情况很方便,例如foo?.bar?.baz,如果某些事物为空,您宁愿不使用 NPE 炸毁,但宁愿不输入所有的空检查。

于 2013-02-20T22:11:29.707 回答
3

不,没有。这没有任何意义。

?:是三元比较运算符 - 一个表达式。如果没有 else 语句,表达式的值是多少?C# 有一个速记版本??,但这只是语法糖,而 Java 没有这样的东西。

于 2013-02-20T22:11:51.893 回答
3

我猜你是用它来给一个var赋值,我称之为“c”,这个想法是你只想在if语句为真时赋值。正常的方法是:

if(a > b) c = a;

但是,如果您真的想使用三元语法,您可以编写:

c = a > b ? a : c;

请注意,三元括号是可选的,所以我省略了它们。

于 2013-02-20T22:22:20.610 回答