Java:为什么在没有new运算符的情况下不能使用{..}返回数组?

时间:2013-12-05 07:37:26

标签: java arrays

我在网站上搜索了很多,但没有找到任何相关的问题。所以我认为这不是重复。

我知道我们可以用3种方式初始化数组:

  • char[ ] charAr=new char[10];
  • char[ ] charAr={'a', 'b', 'c'};
  • char[ ] charAr=new char[]{'a','b','c'};

第一个问题是:{'a','b','c'}这种东西的名称是什么?它被称为数组文字吗?

第二个问题是:new char[]{'a','b','c'}{'a','b','c'}之间的区别是什么?

第三个问题是:为什么我无法使用{'a','b','c'}返回新创建的数组? 我必须返回new char[]{'a','b','c'}

第4个问题:new char[10]new char[]{'a','b','c'}都是数组的构造函数,对吗?

5 个答案:

答案 0 :(得分:10)

在宣言中:

char[ ] charAr={'a', 'b', 'c'};

数组{'a', 'b', 'c'}称为数组初始值设定项。它在Section 10.6 of the Java Language Specification中描述。它只能像那样编写(前面没有new char[])作为变量声明的一部分。

在任何其他地方(包括return语句),您需要使用数组创建表达式。这些在Section 15.10 of the JLS中描述。您可以使用数组初始值设定项或数组创建表达式在声明变量时初始化该变量。这就是为什么new char[]在声明变量时似乎是可选的。

关于你的4 th 问题:它们在技术上不是“构造函数”(在Java术语中具有特定含义)但是,它们都构造数组(或者更确切地说,它们都创建了数组)阵列)。

答案 1 :(得分:3)

  

第一个问题是:{'a','b','c'}的名称是什么?它被称为数组文字吗?

Java中没有数组文字,它们用数组填充数组,即初始化。

  

第二个问题是:新的char [] {'a','b','c'}与{'a','b','c'}有什么区别?

第一个称为*内联数组声明*。

使用秒,您可以将其分配给已定义类型的数组。

我在这里的示例:https://stackoverflow.com/a/19658726/1927832

  

第三个问题是:为什么我不能用{'a','b','c'}返回一个新创建的数组?我必须返回新的char [] {'a','b','c'}。

因为在第一种情况下缺少类型,并且编译器不知道它们是哪种类型的元素。

  

第4个问题:新的char [10]和新的char [] {'a','b','c'}都是数组的构造函数,对吗?

这是创建一个具有指定长度的字符数组。

答案 2 :(得分:2)

  1. Syntactic Sugar
  2. 编译器将其填入,因为它能够推断出它
  3. 因为在返回行中,语言不提供syntactic sugar

答案 3 :(得分:1)

第1个问题答案: - {a,b,c}是在强化时给予数组的值。 所以,这些东西的名称是数组初始化....而那些不是文字

第二个问题的答案: - 差异是[] {a,b,c}调用参数化构造函数而{a,b,c}只是使用数组...

第三:我无法得到你的任务

第四:是的,都是建设者......

答案 4 :(得分:1)

char[ ] charAr=new char[10];

是一个正确的数组声明。您可以将charAr分配给另一个char数组。

char[ ] charAr=new char[]{'a','b','c'};

在一行中同时执行声明和初始化的语法。您可以将其重新分配给新的char数组。

char[ ] charAr={'a', 'b', 'c'};

是数组文字。您只能在定义数组的位置指定文字值。您无法将其重新分配给新的char数组。

您无法返回数组文字,因为在编译期间,编译器不知道您要返回的元素的类型。