三元对比如果在Java中

时间:2015-05-19 14:14:03

标签: java ternary-operator

为什么使用这样的三元组是不正确的,因为使用if是正确的?

//Error when using as ternary
Character.isDigit(myDto.getNameStr().charAt(0)) ? digitArrayList.add(myDto) : charArrayList.add(myDto);

//OK when used as if ... else
char c = myDto.getNameStr().charAt(0);
if(Character.isDigit(c)) {
  digitArrayList.add(myDto);
} else {
  charArrayList.add(myDto);
}

2 个答案:

答案 0 :(得分:7)

不允许将三元条件作为独立语句。只允许某些表达式作为独立语句,如赋值或方法调用。

JLS将允许作为独立语句的表达式分类为suppressing error messages

  

分配
  PreIncrementExpression
  PreDecrementExpression
  PostIncrementExpression
  PostDecrementExpression
  的MethodInvocation
  ClassInstanceCreationExpression

无论如何,有几种不明智的方法可以使用三元:

// statement is an assignment
boolean ignored =
    Character.isDigit(...) ?
        digitArrayList.add(myDto) : charArrayList.add(myDto);

// statement is a method invocation
(Character.isDigit(...) ? digitArrayList : charArrayList)
    .add(myDto);

但我不建议使用它们,它们只是一种好奇心。更简单的是使用if...else

答案 1 :(得分:0)

三元运算符的基本目的是将ifel条件压缩为多行。这样就增加了代码的可读性。三元运算符也称为条件赋值运算符,因此,如果您没有赋值,则在此处。所以它给出了错误。

要使代码与三元运算符一起使用,您可以修改如下代码

boolean result =  Character.isDigit(myDto.getNameStr().charAt(0)) ? digitArrayList.add(myDto) : charArrayList.add(myDto);

最佳做法是将此类代码划分为if ... else代码块