gpt4 book ai didi

java - 这两个数组声明有什么区别?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:16 25 4
gpt4 key购买 nike

请解释一下这两种数组声明的区别

int[] a = {5, 7, 8, 9, 6};

int[] arr = new int[]{5, 7, 8, 9, 6};

是不是像第一个语句没有内存分配,第二个内存分配给每个元素?

另外,为什么下面的声明会导致错误?

int[] arr = new int[5]{5, 7, 8, 9, 6};

最佳答案

它们可能看起来相似,它们可能行为相似,但它们确实不同。

您的第一个声明是 array initializer .它只能在你声明一个字段或变量时使用(就像你使用 int[] a = {1, 2, 3, 4, 5, 6}),或者作为第二种形式,数组创建表达式。

数组初始值设定项需要可具体化的类型才能使其成为有效语法。这意味着您不能使用它来创建通用数组。例如:

public class Example<T> {

public void doStuff(T first, T second, T third) {
// Invalid; T is not a reifiable type
T[] stuff = {first, second, third};
}

public void doStuff(int first, int second, int third) {
// Valid; int is reifiable
int[] stuff = {first, second, third};
}
}

您拥有的第二个声明是 array creation expression .它允许多种形式的数组声明。它还allows you to create generic arrays通过一些相当强制的类型转换。

关于为什么第三种语法无效的问题:以下是 ArrayCreationExpression 的摘录。

  ArrayCreationExpression:
new PrimitiveType DimExprs Dims (optional)
new ClassOrInterfaceType DimExprs Dims (optional)
new PrimitiveType Dims ArrayInitializer
new ClassOrInterfaceType Dims ArrayInitializer

DimExprs:
DimExpr
DimExprs DimExpr

DimExpr:
[ Expression ]

Dims:
[ ]
Dims [ ]

实际上,语法 new int[5]{1, 2, 3, 4, 5} 无效的原因是上述原因。

int[5]{1, 2, 3, 4, 5} 包含一个 DimsExpr,也就是 [5] 部分和一个 ArrayInitializer,它是 {1, 2, 3, 4, 5} 片段。上述语言规范不允许同时声明DimsExpr(s)ArrayInitializer

关于java - 这两个数组声明有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28779453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com