【问题标题】:Initialize arrays using ternary operator使用三元运算符初始化数组
【发布时间】:2010-12-20 06:54:02
【问题描述】:

我试过这样的:

boolean funkyBoolean = true; int array[] = funkyBoolean ? {1,2,3} : {4,5,6};

但是这段代码甚至无法编译。 对此有什么解释吗? funkyBoolean ? {1,2,3} : {4,5,6} 不是一个有效的表达式吗? 提前谢谢!

【问题讨论】:

    标签: java arrays ternary-operator


    【解决方案1】:
    boolean funkyBoolean = true;
    int[] array = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};
    

    【讨论】:

      【解决方案2】:

      您只能在非常有限的情况下使用{1, 2, 3} 语法,这不是其中之一。试试这个:

      int array[] = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};
      

      顺便说一句,好的Java风格是将声明写成:

      int[] array = ...
      

      编辑:为了记录,{1, 2, 3} 受到如此限制的原因是它的类型不明确。理论上它可以是一个整数、长整数、浮点数等数组。此外,JLS 定义的 Java 语法禁止它,所以就是这样。

      【讨论】:

      • 在 JDK7 中,{1, 2, 3}(在其他情况下)看起来好像是一个集合,类型由目标类型确定(如泛型方法,例如 Arrays.asList)。
      • 仅作记录,Tom 的评论暗示的拟议语言更改并未纳入 JDK 7。
      【解决方案3】:

      可以指定一个数组初始化器 在声明中,或作为 数组创建表达式(§15.10),创建数组并提供一些初始值

      这就是Java Spec 所说的 (10.6)。因此,“短”版本(带有创建表达式)只允许在声明中使用 (int[] a = {1,2,3};),在所有其他情况下,如果您想使用初始化程序,则需要 new int[]{1,2,3} 构造。

      【讨论】:

        猜你喜欢
        • 2023-01-02
        • 2013-03-30
        • 1970-01-01
        • 2021-07-03
        • 2023-03-27
        • 2013-07-27
        • 2013-11-03
        • 2012-07-14
        • 2017-06-04
        相关资源
        最近更新 更多