为什么可以在java中使用变量作为长度初始化数组?

时间:2012-03-28 01:51:35

标签: java c++ arrays

我尝试在java中使用整数数组,代码如下:

    public static void main(String[] args) {
        int[] array = testArray(100);
        System.out.println(array.length);
        for(int i = 0; i < 100; i++)
           System.out.println(array[i]);
    }

    public static int[] testArray(int size){
        int[] array = new int[size];
        for(int i = 0; i < size; i++)
           array[i] = i;
        return array;
    }

我还在C ++中测试一个整数数组,如下所示:

       #include<iostream>
       using namespace std;

       void getArray(int size)
       {
            int array[size];
            for(int i=0; i<size; i++)
                array[i]=i; 
      }

      int main()
      {
           getArray(10);
           return 0;
      }

我总是用两个片段得到正确的答案,为什么?因为我认为数组的长度不能为java,c和c ++这样的语言变化。

4 个答案:

答案 0 :(得分:4)

三种语言不同,不同语言的功能也会有所不同。特别是,在C99中,您可以在堆栈中定义变量的数组(对于那些主要编程为Java的数组,这通常用于指代不是编译时常量的大小,而不是数组将更改大小)。

在C ++中,你不能在堆栈中声明它们(GCC允许这样做,对模仿C99行为的语言有不一致的扩展),但是你可以用给定大小和存储的new动态分配内存。变量中的指针。

在Java中,你不能在堆栈中创建一个数组,你所能做的就是用new动态分配数组并存储一个引用。

int size = 100;

// C99
int data[size];

// C++
// int data[size];          // error, but allowed by gcc
int *data = new int[size]; 

// Java
int[] data = new int[size];

答案 1 :(得分:2)

Java和C是不同的语言。标准C中允许的仅作为动态分配(malloc / calloc)在Java中是允许的,因为Java中的所有数组分配都是动态; Java中缺少显式堆栈分配的概念。

答案 2 :(得分:2)

Java中数组的长度不可变。它是在创建数组时定义的(即,在运行时动态),但在此之后无法更改。

此外,每个数组都有一个length属性,可用于使for循环能够遍历任何长度的数组:

for(int i = 0; i < array.length; i++)
   System.out.println(array[i]);

答案 3 :(得分:0)

这里没有变数。您是通过将大小传递给创建所请求大小的数组的方法来初始化数组。换句话说,初始化后无法操纵数组的大小,而ArrayList则可以改变大小。