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

2022-09-04 20:25:30

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

我知道我们可以用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'}


答案 1

在声明中:

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

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

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

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


答案 2

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

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

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

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

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

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

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

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

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

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