Java中数组声明和初始化

来源:互联网 发布:维旺迪收购育碧 知乎 编辑:程序博客网 时间:2024/06/04 19:42

在c语言中,通常我们在声明数组的时候,可能不会对其赋初值并且可以指定数组的元素个数,如:

int a[10];

之后的语句可以对数组a[10]进行直接的赋值和操作。


在java中,声明数组会有所不同,如 int[ ] a(或者int a[] ,推荐用第一种,因为第一种的语句更能体现java引用机制]),int[ ]是一个新的数据类型,int在java中是基本类型,int[ ]则是其对应的引用类型,int a[ ]表示定义一个引用变量a,指向一个整型类型的数组,但是java并没有为此数组分配内存空间,所以不能对之赋上数组的长度。


java中,只有对数组进行初始化后,才能使用该数组,数组初始化有两种方式:

1.静态初始化: 程序员在初始化数组时为数组每个元素赋值,如

int a[ ]; //声明

a=new int[ ]{1,2,3,4};//初始化

声明和初始化结合在一起:int [ ] a=new int[ ]{1,2,3,4};

  或者,int a [ ]=new int[ ]{1,2,3,4};

但是建议采用分开的方式,因为分两步走的话,第一步是声明数组,第二步是为数组开辟空间;假如在循环中的话,在实际使用的时候开辟空间有利于提高代码的执行效率!


2.动态初始化: 数组初始化时,程序员只指定数组的长度,由系统为每个元素赋初值,如:

int a[ ]; 

a=new int[10];//int型数组系统为每个元素赋初值0

或者 int a [ ]=new int[10];

int [ ] a=new int[10];



数组是否必须初始化?

对于这个问题,关键在于要弄清楚数组变量和数组对象的差别。数组变量是存放在栈内存中的,数组对象是存放在堆内存中的。数组变量只是一个引用变量,他能够指向实际的数组对象。所谓的数组初始化并非对数组变量初始化,而是对数组对象进行初始化。

对于数组变量来说,它并不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用该数组变量。

所以,Java语言中的数组,不一定要初始化也可正常使用。如下面的例子:


  1. public class T {     /**     * @param args     */     public static void main(String[] args) {       // TODO Auto-generated method stub       //定义并初始化nums数组       int nums[] = new int[]{3,13,4,6};       //定义一个prices数组变量       int prices[];       //让prices数组指向nums所引用的数组       prices = nums;       for(int i=0;i<prices.length;i++){         System.out.println(prices[i]);       }       //将prices数组的第三个元素赋值为100       prices[2] = 100;       //访问nums数组的第三个元素 将看到100       System.out.println(nums[2]);     }   } 


从上面代码可以看出,定义了prices数组之后,并未对prices数组进行初始化。 当执行int prices[]之后,

程序的内存分配如图

从图可以看出,此时的prices数组还未指向任何有效的内存,未指向任何数组对象,此时的程序还不可使用prices数组变量。

当程序执行prices = nums之后,prices变量将指向nums变量所引用的数组,此时prices变量和nums变量引用同一个数组对象。

执行这条语句之后,prices变量已经指向有效的内存及一个长度为4的数组对象,因此程序完全可以正常使用prices变量了。



0 0
原创粉丝点击