gpt4 book ai didi

java - 为什么在 Java 中初始化数组对象时不需要提供括号?

转载 作者:行者123 更新时间:2023-12-02 10:05:22 25 4
gpt4 key购买 nike

我现在正在从头开始学习 Java,我发现有趣的一件事是,大多数更复杂的数据结构必须以这种方式创建:

ArrayList<String> list = new ArrayList<String>();

另一方面,可以通过键入简单地初始化字符串

String[] str_array = new String[10];

为什么在初始化数组时不需要提供通常与调用构造函数相关的括号?这只是一种风格选择吗?如果对 JVM 有更好了解的人能够提供一些见解来满足我的好奇心,那就太好了。

最佳答案

对象创建和数组创建的区别是这样的:

  • 普通类具有被调用的构造函数。
    • new ArrayList<String>() 中的括号表示构造函数调用。
    • 即使构造函数没有参数,括号仍然必须存在(与不带参数的方法调用相同)。
  • 另一方面,数组类没有构造函数
    • 虽然数组是对象,但它们的类是由 JVM 创建的,因此会受到其他类无法进行的特殊处理
    • 初始化数组是 anewarray 的副作用。 , multianewarraynewarray字节码指令。

数组类没有构造函数可以通过执行来证明

System.out.println(int[].class.getConstructors().length);

返回 0。

<小时/>

最后,这可以归结为语言设计者在 20 多年前做出的决定,并且受到其他现有语言(如 C++)设计决策的影响。

关于java - 为什么在 Java 中初始化数组对象时不需要提供括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55369728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com