三元作业没有"否则"表达

时间:2017-02-20 14:24:02

标签: java ternary-operator null-coalescing-operator null-coalescing

是否可以使用类型的三元赋值表达式的简写

boolean x = false;
// ... code ...
a = x ? b : a;   // Assigning a to a is pointless
a += x ? 1 : 0;  // Adding 0 to a is pointless

我正在思考

的内容
a = x ? b;   // Assign b to a if x is true
a += x ? 1;  // Add 1 to a if x is true

并不是说它节省了很多打字,我只是好奇这样的事情是否存在。我刚刚在PHP 7中发现了null coalesce operator,它做了类似的事情。对我而言,它看起来比

更清洁
if( x ) a = b;
if( x ) a += 1;

因为这些是作业,所以当从左到右阅读时,使用三元表达看起来更自然。假设的重复问题不是专门针对分配的,我认为这是三元运算符的特殊用例。

1 个答案:

答案 0 :(得分:0)

不幸的是,Java支持

来自官方oracle doc:

  

另一个条件运算符是?:,可以被认为是if-then-else语句的简写(在本课程的控制流语句部分中讨论过)。
  此运算符也称为三元运算符,因为它使用三个操作数   在以下示例中,此运算符应读作:"如果someCondition为true,则将value1的值赋给result。否则,将value2的值赋给result。"

     

以下程序ConditionalDemo2测试?:运算符:

class ConditionalDemo2 {

    public static void main(String[] args){
        int value1 = 1;
        int value2 = 2;
        int result;
        boolean someCondition = true;
        result = someCondition ? value1 : value2;

        System.out.println(result);
    }
}
  

因为某些条件是真的,所以此程序会打印" 1"到屏幕。
  如果它使代码更具可读性,请使用?:运算符而不是if-then-else语句;
  例如,当表达式紧凑且没有副作用(例如赋值)时。

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html