为什么java中不允许使用int a[10]?

为什么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

我开始学习java,我发现在数组的声明中,我们不能像这样指定它的大小(在C中使用):

但我们必须这样做:

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”的大小

  • 声明:粗体代码集是将变量名与对象类型关联的所有变量声明
  • 实例化:new关键字是创建对象的Java操作符。 由于java中的数组是对象,所以它是必需的

  • 初始化:新操作符后面是对构造函数的调用,构造函数初始化新对象

  • 注意

    在java中,内存不断地被动态分配(对象由新操作符动态分配内存),然后被“遗忘”(该语言实际上迫使您忘记它们)。也就是说,编码器将其留给垃圾收集引擎来清理内存分配混乱。 在C语言中,静态内存分配的概念允许声明

    int a[10];
    

    java数组中的引用:是对象。 Java将这些裸骨数组包装在一个对象中 可以在数组上调用对象的所有方法

    **int a[]** = new int[5];
    
    5
    方括号内表示要存储五个值,是数组“n”的大小

  • 声明:粗体代码集是将变量名与对象类型关联的所有变量声明
  • 实例化:new关键字是创建对象的Java操作符。 由于java中的数组是对象,所以它是必需的

  • 初始化:新操作符后面是对构造函数的调用,构造函数初始化新对象

  • 注意

    在java中,内存不断地被动态分配(对象由新操作符动态分配内存),然后被“遗忘”(该语言实际上迫使您忘记它们)。也就是说,编码器将其留给垃圾收集引擎来清理内存分配混乱。 在C语言中,静态内存分配的概念允许声明

    int a[10];
    

    参考资料:这是一幅更大画面的一部分:Java中没有堆栈分配结构。这就是为什么类型系统可以划分为基本类型引用类型。后者的实例是通过引用动态分配和访问的。这是Java设计的深层不变量

    原因可以追溯到Java设计的关键驱动目标:成为一种具有尽可能少的Gotcha的简单语言,同时仍然提供足够的表达能力


    您可能会问,堆栈分配数组有什么这么复杂:当您试图将其传递到另一个函数时,问题就开始了。按值传递是不可能的,而按引用传递意味着对堆栈分配对象的引用会逃逸该方法的作用域,因此在解除分配后可能会取消对该对象的引用

    这是一幅更大画面的一部分:Java中没有堆栈分配结构。这就是为什么类型系统可以划分为基本类型引用类型。后者的实例是通过引用动态分配和访问的。这是Java设计的深层不变量

    原因可以追溯到Java设计的关键驱动目标:成为一种具有尽可能少的Gotcha的简单语言,同时仍然提供足够的表达能力


    您可能会问,堆栈分配数组有什么这么复杂:当您试图将其传递到另一个函数时,问题就开始了。按值传递是不可能的,而按引用传递意味着对堆栈分配对象的引用会逃逸该方法的作用域,因此在解除分配后可能会取消对该对象的引用

    这是因为数组是对象,对象位于堆上,堆上的内容是使用
    new
    :-)分配的请不要投票赞成结束。这是一个很好的问题。我认为“为什么语言不同”不是一个很好的话题性问题。请关闭。:-)这是因为数组是对象,对象位于堆上,堆上的内容是使用
    new
    :-)分配的请不要投票赞成结束。这是一个很好的问题。我认为“为什么语言不同”不是一个很好的话题性问题。请关闭。:-)关于什么是堆栈,什么是堆,请参考除了“堆”之外还有什么地方可以用Java创建东西。如果不是,那么新的是多余的,似乎是对C++的敬意。@ ScOutter,<代码> int i;<代码>不是在堆上创建的。所以不,
    是新的