java - 双括号初始值设定项和数组

标签 java arrays parameters constructor initializer

<分区>

我有一个具有数组参数的方法,例如:

public static void foo(int[] param) {
    // Some code
}

而且我也可以通过这样写来调用方法

foo(new int[3]);

通常,我们通过 new 运算符或双括号初始化器(如 {1, 2, 3})来声明和初始化数组。例如,int[] foo = new int[3]; int[] foo = {1, 2, 3};

但是不可能使用双括号初始化器作为方法的参数。 {} 仅可用于创建数组对象。

我的问题是:new operator 和 {} 之间有什么区别吗? 如果有,那是什么?

最佳答案

作为 int foo[] = {1, 2, 3}; 一部分的 {} 被称为大括号初始化,是int foo[] = new int[]{1, 2, 3}; 因为可以从左侧推断出 new int[]

在第二种情况下 foo({1, 2, 3}); 无法推断出您的意图,因为没有提示 {1, 2 , 3} 意味着,所以编译器会报错。

当您将其重写为 foo(new int[]{1, 2, 3}); 时,您是在告诉编译器 {} 中的项目是什么意味着代表。

编译器不会(也不会尝试)自动解释 {} 表达式直到它匹配 - 这会导致潜在的歧义。

还有this question ,这似乎涵盖了完全相同的领域。

如@benzonico 所述,它是 language specification 的一部分至于这是一种受支持的语法,其中不包括它在方法调用中的使用。

关于java - 双括号初始值设定项和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28980989/

相关文章:

java - 我应该如何设计具有继承的枚举?

jquery - 如何使用jquery从json数组中获取第一列

arrays - 将 Perl 数组放入哈希中

C++ - 基类的面向对象数组

android - 将信息传递给 Android 服务

python - Python 函数如何处理您传入的参数类型?

c# - 在 C# 中是否可能只需要将两个参数之一传递给方法?

java - Java 不是通过引用传递非原始类型吗

java - 如何在post请求中传递两个参数?

java - volatile 保证可变对象的安全发布?