使用三元运算符初始化数组

时间:2009-11-25 13:04:43

标签: java arrays ternary-operator

我试过这样的事情:


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

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

3 个答案:

答案 0 :(得分:30)

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

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

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

int[] array = ...

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

  

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

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