带空子句的Java三元运算符

带空子句的Java三元运算符,java,ternary-operator,Java,Ternary Operator,这个问题更符合我的好奇心 我经常使用Java的三元运算符来编写较短的代码。但是,我一直在想,如果if或else条件之一为空,是否可以使用它。详情如下: int x = some_function(); if (x > 0) x--; else x++; 可以写为x=(x>0)?x-1:x+1 但是如果(x>0)x-1,是否可以写入if作为带空else子句的三元表达式 但是,如果(x>0)x--,是否可以编写作为带空else子句的三元表达式 否,条件运算符需要三个操作数。如

这个问题更符合我的好奇心

我经常使用Java的三元运算符来编写较短的代码。但是,我一直在想,如果
if
else
条件之一为空,是否可以使用它。详情如下:

int x = some_function();
if (x > 0)
    x--;
else
    x++;
可以写为
x=(x>0)?x-1:x+1

但是如果(x>0)x-1,是否可以写入
if
作为带空else子句的三元表达式

但是,如果(x>0)x--,是否可以编写
作为带空else子句的三元表达式

否,条件运算符需要三个操作数。如果您愿意,您可以这样做:

x = (x > 0) ? x - 1 : x;

…但是(主观上)我认为清晰度受到影响。

三元运算符解析为一个值。这不是块。挑剔:不应该
x=(x>0)?x--:x++be
x=(x>0)--x:++x?或者更好:
x=(x>0)?x-1:x+1否。让编译器处理这些语义问题。Aaack。请不要编写分配给变量并对同一变量使用后增量或前增量的代码。这让我头疼。很抱歉一元增量。编辑它。我看到无数的x=x作业在某个地方发生。如果那样的话,看起来有点愚蠢和低效。我同意,清晰性肯定会受到影响。我对Java对它的理解很好奇,因为在C(使用GCC编译器)中,可能会编写类似
x=(x>0)?:x+1
@ChthonicProject:有趣的是,这是一个特定于GNU的扩展。我之前做过;没有看到任何说明第二个和第三个操作数都是可选的(在Java中)。感谢链接。我不知道它是GNU专用的,我也会在其他平台上试用它。。。受苦了!这是一个很大的帮助(因此是投票)。