【发布时间】:2017-07-09 21:06:54
【问题描述】:
是否可以对类型的三元赋值表达式使用简写
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;
因为这些是赋值,从左到右阅读时使用三元表达式看起来更自然。假定的重复问题与分配无关,在我看来这是三元运算符的特殊用例。
【问题讨论】:
-
使用
if语句。这就是 Java 提供它的原因。 -
顺便说一句,Java 是一门实用的语言,它试图避免用户使用别名和多重选择;相反,它侧重于简单性(尽管阅读此评论的人可能会觉得很奇怪,但这是我使用 Java 几年后对 Java 的感觉)。
-
是什么阻止你在你的一个 Java 类中包含同一行并自行检查它是否无法编译?
-
@walen 没有什么能阻止我这样做,实际上我有 - 它给了我一个语法错误。我不是在问所提供的 hypothetical 示例是否编译,我是在问 Java 中是否有任何这样的语言结构。在发布无用的 cmets 之前,是什么阻止您真正思考问题是什么?
-
您的问题的答案是“不,Java 没有条件赋值运算符。”您似乎将条件赋值与条件值混淆了。
a = x ? b : a是无条件赋值,a总是被赋值为三元运算符x ? b : a的值。
标签: java ternary-operator null-coalescing-operator null-coalescing