在 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[]{};
为什么 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[]{};