为什么java中不允许使用int a[10]?
我开始学习java,我发现在数组的声明中,我们不能像这样指定它的大小(在C中使用): 但我们必须这样做:为什么java中不允许使用int a[10]?,java,c,arrays,Java,C,Arrays,我开始学习java,我发现在数组的声明中,我们不能像这样指定它的大小(在C中使用): 但我们必须这样做: int[] a=new int[10]; int a[]=new int[10]; 为什么java在这里看起来很复杂,而不是像C风格那样允许数组声明?因为java不是C。它与C有一些共同的习惯用法(实际上相当多),但java语言开发人员在他们的工作中并不完全依赖C语言 数组本身是存储在堆上的对象,因此需要执行new来创建它们。数组的引用a[]很可能存储在堆栈上,但这不是数组本身。因为Jav
int[] a=new int[10];
int a[]=new int[10];
为什么java在这里看起来很复杂,而不是像C风格那样允许数组声明?因为java不是C。它与C有一些共同的习惯用法(实际上相当多),但java语言开发人员在他们的工作中并不完全依赖C语言
数组本身是存储在堆上的对象,因此需要执行
new
来创建它们。数组的引用a[]
很可能存储在堆栈上,但这不是数组本身。因为Java不是C。它与C有一些共同的习惯用法(实际上相当多),但Java语言开发人员在他们的工作中并不完全依赖C语言
数组本身是存储在堆上的对象,因此需要执行
new
来创建它们。数组的引用a[]
很可能存储在堆栈上,但这不是数组本身。在java数组中是对象。
Java将这些裸骨数组包装在一个对象中
可以在数组上调用对象的所有方法
**int a[]** = new int[5];
5
方括号内表示要存储五个值,是数组“n”的大小
int a[10];
java数组中的引用:是对象。 Java将这些裸骨数组包装在一个对象中 可以在数组上调用对象的所有方法
**int a[]** = new int[5];
5
方括号内表示要存储五个值,是数组“n”的大小
int a[10];
参考资料:这是一幅更大画面的一部分:Java中没有堆栈分配结构。这就是为什么类型系统可以划分为基本类型和引用类型。后者的实例是通过引用动态分配和访问的。这是Java设计的深层不变量 原因可以追溯到Java设计的关键驱动目标:成为一种具有尽可能少的Gotcha的简单语言,同时仍然提供足够的表达能力
您可能会问,堆栈分配数组有什么这么复杂:当您试图将其传递到另一个函数时,问题就开始了。按值传递是不可能的,而按引用传递意味着对堆栈分配对象的引用会逃逸该方法的作用域,因此在解除分配后可能会取消对该对象的引用 这是一幅更大画面的一部分:Java中没有堆栈分配结构。这就是为什么类型系统可以划分为基本类型和引用类型。后者的实例是通过引用动态分配和访问的。这是Java设计的深层不变量 原因可以追溯到Java设计的关键驱动目标:成为一种具有尽可能少的Gotcha的简单语言,同时仍然提供足够的表达能力
您可能会问,堆栈分配数组有什么这么复杂:当您试图将其传递到另一个函数时,问题就开始了。按值传递是不可能的,而按引用传递意味着对堆栈分配对象的引用会逃逸该方法的作用域,因此在解除分配后可能会取消对该对象的引用 这是因为数组是对象,对象位于堆上,堆上的内容是使用
new
:-)分配的请不要投票赞成结束。这是一个很好的问题。我认为“为什么语言不同”不是一个很好的话题性问题。请关闭。:-)这是因为数组是对象,对象位于堆上,堆上的内容是使用new
:-)分配的请不要投票赞成结束。这是一个很好的问题。我认为“为什么语言不同”不是一个很好的话题性问题。请关闭。:-)关于什么是堆栈,什么是堆,请参考除了“堆”之外还有什么地方可以用Java创建东西。如果不是,那么新的是多余的,似乎是对C++的敬意。@ ScOutter,<代码> int i;<代码>不是在堆上创建的。所以不,是新的