我知道你可以在 Java 中使用这样的东西:
(a > b) ? a : b;
没有其他部分是否有类似的东西?
它是一个表达式,而不是一个语句,这意味着它总是会计算出一些东西。如果没有“其他部分”,那么如果测试为假,则表达式将没有任何东西可以评估。所以,不,没有 else 就没有类似的东西了。
我喜欢使用条件运算符的一点是你可以分配类似的东西
foo = a > b ? c : d;
并且阅读它你知道 foo 得到了分配给它的东西,无论测试是否正确。因此,它为您提供了一种方法来指示分配的值取决于某些测试。
Groovy 有一些类似的运算符:
?:
,Elvis 运算符,如果左侧的表达式为空,则将右侧的值分配为默认值。
?.
,安全空运算符,如果左侧计算结果为 null,则计算结果为 null。这对于您有一系列可能为空的事物的情况很方便,例如foo?.bar?.baz
,如果某些事物为空,您宁愿不使用 NPE 炸毁,但宁愿不输入所有的空检查。
不,没有。这没有任何意义。
?:
是三元比较运算符 - 一个表达式。如果没有 else 语句,表达式的值是多少?C# 有一个速记版本??
,但这只是语法糖,而 Java 没有这样的东西。
我猜你是用它来给一个var赋值,我称之为“c”,这个想法是你只想在if语句为真时赋值。正常的方法是:
if(a > b) c = a;
但是,如果您真的想使用三元语法,您可以编写:
c = a > b ? a : c;
请注意,三元括号是可选的,所以我省略了它们。