我开始学习java,我发现在数组的声明中我们不能像这样指定它的大小(在C中使用):
int a[10];
但我们必须这样做:
int[] a=new int[10];
int a[]=new int[10];
为什么java在这里似乎很复杂,而不是像C风格那样允许数组声明?
答案 0 :(得分:14)
因为Java不是C.它与C共享一些常见的习惯用法(实际上有很多),但Java语言开发人员并没有完全依赖C语言。
数组本身是存储在堆上的对象,因此需要执行new
来创建它们。数组的引用 a[]
可能存储在堆栈中,但这不是数组本身。
答案 1 :(得分:1)
在java数组中有对象。 因此,Java将这些裸骨阵列包装在一个对象中 可以在数组上调用Object的所有方法。
**int a[]** = new int[5];
方括号内的 5
表示您将存储五个值,并且是数组'n'的大小。
实例化: new 关键字是一个创建对象的Java运算符。 因为在java数组中是对象,所以必要。
初始化:新运算符后面是对构造函数的调用,该构造函数初始化新对象。
NB。
在java中,Memory不断被动态分配(对象由新运算符动态分配内存)然后“忘记”(该语言实际上迫使你忘记它们)。也就是说,编码器将它留给垃圾收集引擎来清理他的内存分配混乱。 在C中,静态内存分配的概念允许声明
int a[10];
答案 2 :(得分:0)
这是更大图片的一部分: Java中没有堆栈分配的结构。这就是为什么类型系统可以划分为基本类型和引用类型。后者的实例是通过引用动态分配和访问的。这是Java设计的深层不变量。
这样做的原因可以追溯到Java设计的关键驱动目标:成为一种简单的语言,尽可能少的陷阱,同时仍然提供足够的表现力。
你可能会问堆栈分配的数组有多复杂:当你尝试将它传递给另一个函数时,麻烦就开始了。通过值传递是不可能的,并且通过引用传递意味着对堆栈分配的对象的引用会转义方法的范围,因此在解除分配后可能会取消引用它。