为什么我们不能在Java中像这样创建数组:
int marks[5];
在声明之后分配值吗?
请问有人可以解释这个术语或区别吗。
为什么我们不能在Java中像这样创建数组:
int marks[5];
在声明之后分配值吗?
请问有人可以解释这个术语或区别吗。
这是因为 Java 中没有栈数组。这里是 Java 的等效写法:
int[] marks = new int[5];
这看起来很像在C ++中分配动态大小的数组。当然,您不必担心调用delete[]
,因为它是垃圾回收的。
由于你引用的语法是在栈上分配数组,而Java数组是对象,所有Java对象都分配在堆上(除了最近的JVM优化,但这些是隐含的)。
在没有手动内存管理的语言中,这基本上是必须的,因为栈分配的东西在调用返回时会消失,导致悬空指针问题,Java的一个基本特性就是不允许出现这种情况。
当然,有人可以争论说Java应该使用栈分配语法来进行堆分配,但那样会使任何了解C语言的人感到困惑 - 这不好。
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
类型(继承自Object
类)。而要创建一个对象,必须使用new
关键字。(大多数情况下)
我认为new
关键字背后的原因是表示这些变量是对动态分配实例的引用。