java - 三元与 if 在 Java 中

标签 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);
}

最佳答案

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

JLS 将那些允许作为独立语句的表达式分类为 StatementExpression :

Assignment
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 会更清楚。

关于java - 三元与 if 在 Java 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30328168/

相关文章:

javascript - javascript 三元运算符中逗号的正确使用

php - 使用三元运算符的 echo 中的 if 语句

javascript - Vue/Javascript - 编写这个三元组的最佳方式

ruby - 将 "s"添加到数组中除给定数组中的第二个元素之外的每个单词的末尾,仅使用一行代码

java - Android相机应用程序: Outputting bitmap to second activity

java - 如何让 Liferay 不产生压缩的 HTML 代码?

java - 如何从 Eclipse "Open Call Hierarchy"获取项目信息?

c++ - 在 C++ 中创建对三元运算符结果的 const 引用是否安全?

java - Dagger 组件有冲突的作用域

java - IText5 - 使用相同内容和 SmartPdfCopy 创建 10000 页 PDF 时占用大量内存