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

use*_*966 13 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'}.

第四问题:既new char[10]new char[]{'a','b','c'}为数组的构造函数,对不对?

Ted*_*opp 10

在声明中:

char[ ] charAr={'a', 'b', 'c'};
Run Code Online (Sandbox Code Playgroud)

该数组{'a', 'b', 'c'}称为数组初始化程序.它在Java语言规范的第10.6节中描述.它只能new char[]作为变量声明的一部分编写(没有在它前面).

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

关于你的第四问题:它们在技术上不是"构造函数"(在Java术语中具有特定含义)但是,它们都构造数组(或者更准确地说,它们都创建数组).