【问题标题】:Ternary assignment without "else" expression [duplicate]没有“else”表达式的三元赋值[重复]
【发布时间】: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


【解决方案1】:

很遗憾,Java 不支持

来自官方 oracle 文档:

另一个条件运算符是 ?:,它可以被认为是 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);
    }
}

因为 someCondition 为真,所以该程序将“1”打印到屏幕上。
使用 ?: 运算符代替 if-then-else 语句,如果它使您的代码更具可读性;
例如,当表达式紧凑且没有副作用(如赋值)时。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-03
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 2014-02-12
    • 2013-04-21
    • 2012-01-13
    相关资源
    最近更新 更多