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

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

我知道我们可以用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'}都是数组的构造函数,对吧?

在声明中:

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

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

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

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

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

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

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

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

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

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

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

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

第四个问题:新的char [10]和新的char [] {‘a’,’b’,’c’}都是数组的构造函数,对吧?

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

  1. 句法糖
  2. 编译器将其填入,因为它能够推断出它
  3. 因为在回归线上,语言不提供语法糖

第一个问题答案: – {a,b,c}是在强化时给予arrays的值。 因此,这些东西的名称是数组初始化….而那些不是文字

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

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

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

 char[ ] charAr=new char[10]; 

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

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

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

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

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

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