首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在java中数组可以用长度变量初始化?

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

Stack Overflow用户
提问于 2012-03-28 09:51:35
回答 4查看 313关注 0票数 0

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

代码语言:javascript
复制
    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++中测试了一个整数数组,如下所示:

代码语言:javascript
复制
       #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++这样的语言来说不能是可变的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-28 10:15:58

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

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

在Java语言中,您永远不能在堆栈中创建数组,您所能做的就是使用new动态分配数组并存储引用。

代码语言:javascript
复制
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];
票数 4
EN

Stack Overflow用户

发布于 2012-03-28 09:54:20

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

票数 2
EN

Stack Overflow用户

发布于 2012-03-28 09:55:10

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

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

代码语言:javascript
复制
for(int i = 0; i < array.length; i++)
   System.out.println(array[i]);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9900132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档