我开始学习java,我发现在数组的声明中,我们不能像这样指定数组的大小(在C中使用):
int a[10];但我们必须这样做:
int[] a=new int[10];
int a[]=new int[10];为什么java在这里看起来很复杂,而不是像C样式那样允许数组声明呢?
发布于 2012-11-10 06:37:05
因为Java不是C,所以它与C有一些共同的习语(实际上有很多),但是Java语言开发人员在他们的努力中并不完全依赖于C语言。
数组本身是存储在堆上的对象,因此需要执行new来创建它们。对数组的引用a[]很可能存储在堆栈上,但这不是数组本身。
发布于 2012-11-10 07:29:11
在java中,数组是对象。Java将这些裸露的数组封装在一个对象中,因此可以在数组上调用对象的所有方法。
**int a[]** = new int[5];方括号内的5表示要存储五个值,并且是数组‘n’的大小。
注意:
在java中,内存不断地被动态分配(对象是由新操作符动态分配内存),然后“被遗忘”(语言实际上迫使您忘记它们)。也就是说,编码器把它留给垃圾收集引擎来清理他的内存分配混乱。在C中,静态内存分配的概念允许声明
int a[10];参考资料:Java阵列
发布于 2012-11-10 09:31:03
这是一个大得多的画面的一部分:在中没有堆栈分配的结构。这就是类型系统可以划分为基元类型、和引用类型的原因。后者的实例是通过引用动态分配和访问的。这是Java设计的深层不变量。
这样做的原因可以追溯到Java设计的关键驱动目标:成为一种简单的语言,尽可能少的问题,同时仍然提供足够的表现力。
您可能会问,堆栈分配数组的复杂之处在于:当您试图将它传递到另一个函数时,麻烦就开始了。通过值传递是不可能的,而通过引用传递意味着对堆栈分配对象的引用转义了方法的作用域,因此它可能在取消分配后被取消引用。
https://stackoverflow.com/questions/13319928
复制相似问题