【问题标题】:Java: Why can't return array using {..} without new operator?Java:为什么不能在没有 new 运算符的情况下使用 {..} 返回数组?
【发布时间】:2013-12-05 07:37:26
【问题描述】:

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

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

【问题讨论】:

  • {'a','b','c'} 在 Java 中不能单独存在。 Java 中没有数组字面量。
  • @LutzHorn 非常感谢。

标签: java arrays


【解决方案1】:

在声明中:

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[] 似乎是可选的。

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

【讨论】:

  • 第四个问题:也许数组初始化器会是一个更好的术语?
  • @user503413 - 会的,只是已经采用了术语。 (见我对第一个问题的回答。)它们都是数组创建表达式。
  • @TedHopp 你很好地回答了我的问题。谢谢
【解决方案2】:

第一个问题是:{'a','b','c'} 之类的东西叫什么名字?是不是叫数组字面量?

Java 中没有数组字面量,它们是用元素填充数组,即初始化。

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

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

第二个你可以将它分配给一个已经定义类型的数组。

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

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

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

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

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

【讨论】:

    【解决方案3】:
    1. Syntactic Sugar
    2. 编译器填充它,因为它能够推导出它
    3. 因为在返回线上,语言不提供 syntactic sugar

    【讨论】:

      【解决方案4】:

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

      第二个问题的答案:- 区别在于 []{a,b,c} 调用参数化构造函数,而 {a,b,c} 只是对数组进行初始化...

      3rd:我无法得到你的任务

      4th:是的,两者都是构造函数....

      【讨论】:

        【解决方案5】:
        char[ ] charAr=new char[10];
        

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

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

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

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

        是一个数组字面量。您只能在定义数组的地方分配文字值。您不能将其重新分配给新的 char 数组。

        你不能返回数组字面量,因为在编译期间,编译器不知道你返回的元素的类型。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-26
          • 1970-01-01
          • 2021-12-03
          • 1970-01-01
          相关资源
          最近更新 更多