胡八一之Java(一):数组及其内存管理

一、Java数组是静态的,数组一旦被初始化过后,其内存空间和数组大小是不可变的。

       数组的初始化有两种方式,静态初始化和动态初始化。

       (1)静态初始化:初始化时由程序员显示的指定数组每个元素的值,其数组大小由系统确定。

//采用第一种静态初始化的方式
String[] name =new String[]{"张三","李四"};
//采用第二种静态初始化的方式
String[] names ={"张三","李四"};

       (2)动态初始化:由程序员确定数组的大小,其数组每项的值有系统确定。 

String[] a =new String[5];

   注意:不要同时使用静态和动态的方式初始化数组,即不要指定了数组的大小,又指定了数组每项元素的值。

二、Java数组在使用时不一定要初始化

     Java数组变量是一种引用型变量,数组变量并不是数组本身,而是指向堆内存中的数组对象本身。

     因此数组使用时并不一定要初始化,举例如下:   

int[] nums =new int[]{1,2,3};
int[] prices ;
prices =nums;

在声明了数组prices后,直接将nums数组赋给prices,这样数组便没有初始化也能使用。这便是引用型变量,其本质是将prices和nums指向了堆内存中同一块连续的内存空间。

所有局部变量(不管是基本类型变量还是引用类型变量)都是存储在其方法的栈内存中的,但引用型变量所引用的对象(包括数组,普通的JAVA对象)都是存储在堆内存中的。

三、没有多维数组

如果已有的类型是int,在int后加[],便成为一个int类型的数组,如果以 int[] 后再加[]得到 int[][] 类型数组,所以所谓多维数组只不过是一维数组叠加而已。

public class Test{
	public static void main(String args[]){
		int a[][][]= new int[3][2][];
		for (int i=0;i<a[0].length;i++){
			System.out.println(a[0][i]);
		}
		a[0][0]=new int[2];
		a[0][0][1]=6;
		for(int i=0;i<a[0][0].length;i++){
			System.out.println(a[0][0][i]);
		}
	}
}

两个问题:

(1)在Java中,声明并创建数组的过程中,内存是如何分配的?

(2)在基本类型数组和引用类型数组之间,在初始化时的内存分配机制有什么区别吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值