在 Java 中使用三元运算符进行数组初始化

Array initialization with ternary operator in Java

为什么 Java 让我这样初始化一个数组: int[] anotherArray = {1,2,3,4,5};

但不会接受这个: int[] 数组 = (arr.length > 0) ? {1,2,3,4,5}:{};

Image

要使您的代码正常工作,请改为执行以下操作:

int[] anArray = (arr.length > 0) ? new int[]{1,2,3,4,5}: new int[]{};

要理解为什么原始代码不起作用,我们需要了解两件事:1) 三元运算符,以及 2) 初始化数组的方法。

1.三元运算符 (?:)

...?...:... 表达式称为三元运算符(不是 lambda)。对于 if-else 语句,它只是一个 shorthand。您可以在 Oracle tutorial.

中找到有关三元运算符的更多信息

Another conditional operator is ?:, which can be thought of as shorthand for an if-then-else statement

2。在 Java

中初始化数组的方法

int[] anArray = {1,2,3,4,5}(不带new)是一个shorthand用于实例化数组,只能在初始化数组时使用宣言。在声明之外实例化数组时,必须使用 new 运算符(“new int[]{...}”)。例如:

int[] b = new int[] {1, 2, 3} // ok
int[] c = {1, 2, 3} // ok

int[] arr;
arr = new int[]{1, 2, 3} // ok
arr = {1, 2, 3} // compilation error

在 Oracle 教程 here 的“创建、初始化和访问数组”部分中有更多关于数组创建的信息。

为什么原始代码不起作用

将以上信息放在一起,1) ?: 只是编写 if-else 语句的另一种方式,以及 2) 在声明 new 之外实例化数组时运营商是必需的。您的原始语句等同于以下内容:

int[] anArray;
if (arr.length > 0) {
    anArray = {1,2,3,4,5} // compilation error
} else {
    anArray = {}; // compilation error
}

要修复编译错误,应使用 new 运算符:

int[] anArray;
if (arr.length > 0) {
    anArray = new int[]{1,2,3,4,5} // ok
} else {
    anArray = new int[]{}; // ok
}

然后简化为:

int[] anArray = (arr.length > 0) ? new int[]{1,2,3,4,5}: new int[]{};