Java中数组的创建(C++风格)

Creation of Arrays in Java (The C++ Style)

本文关键字:C++ 风格 创建 数组 Java      更新时间:2023-10-16

为什么我们不能用Java制作这样的数组:

int marks[5];

在这个声明之后赋值?

任何人请解释术语或差异。

这是因为Java中没有堆栈数组。这里是Java等价物:

int[] marks = new int[5];

它看起来很像在C++中分配动态大小的数组。当然,您不必担心调用delete[],因为它是垃圾收集的。

因为您引用的语法在堆栈上分配数组,Java数组是对象,所有Java对象都在堆上分配(模最近的JVM优化,但这些都是隐式的)。

在一种没有手动内存管理的语言中,它几乎必须是这样的,因为当调用返回时,堆栈分配的东西就会消失,导致指针悬空,而Java的一个基本功能是不允许这样的东西。

当然,有人可能会争辩说Java应该使用堆栈分配语法来进行堆分配,但这会让任何知道C的人感到困惑。

在Java中,数组的大小由创建它的表达式决定,例如:

int[] marks = new int[5];

int[] marks = {1,2,3,4,5};

还请注意尽管Java中允许使用语法int marks[](Java有几个与C++兼容的规则),但不建议使用,语法int[] marks更惯用,因此更可取。

int[] marks = new int[]{1, 2, 3};

因为数组是Object-s(继承自Object类)。要创建对象,必须使用new关键字。(大多数时候)
我认为new关键字背后的原因是表示变量是对动态分配实例的引用。