java数组

黑马程序员_java数组---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a><a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

引用类型数组的初始化

应用类型数组的数组元素是引用,因此情况变得更加复杂:每个数组元素里存储还是引用,它指向另一块内存,这块内存里存储了有效数据。

为了更好地说明引用类型数组的运行过程,下面先定义一个Person类(所有类都是引用类型),

public class Person

{

//年龄

public int age

//

public double height;

//定义一个info方法

public void info(){

System.out.println("我的年龄是:"+age+",我的身高是:"+height);

}

}

下面程序将定义一个Person[]数组接着动态初始化这个Person[]数组,并将这个数组的每个数组元素指定值

public class TestReferenceArray

{

public static void main(String[] args)

{

//定义一个students 数组变量,其类型是person[]

person[] students;

执行动态初始化

students =new Person[2];

//创建一个Person实例,并将这个Person实例赋给zhang变量

Person zhang=new Person();

zhang.age=15;

zhang.height=158;

Person lee=new Person();

lee.age=16;

lee.height=161;

students[0]=zhang;

students[1]=lee;

lee.info();

students[1].info();

}
执行Person[]students;代码时,这行代码仅仅在栈内存中定义了一个引用变量,也就是一个指针,这个指针并未指向任何有效的内存区,此时内存中存储的示意图如下

      

 在图中的栈内存中 定义了一个students变量,他仅仅是一个引用,并未指向任何有效的内存。直到执行初始化,本程序对students数组执行动态初始化,动态初始化有系统为数组元素分配默认的初始值;null即每个数组元素的值都是null,执行动态初始化后的 存储示意如下图                                                                       

                                                                      

                                                                                                                          

从图可以看出,students数组的两个数组元素都是引用,而且这个引用并未指向任何有效的内存 ,因此每个数组元素的值都是null。这意味着依然不能直接使用students数组元素,因为每个数组元素都是null,这相当于定义了两个连续的Person变量,但这个变量还未指向任何有效的内存区,所以这两个连续的Person变量还不能使用。

接着的代码定义了zhanglee两个Person实例,定义这两个实例实际上分配了4块内存,在栈内存中存储了zhanglee两个引用变量,还在堆内存中存储了两个Person实例,此时的内存存储示意图如下

                                                                                                                                                                                                                                                                                                                                                                                                                  

此时students数组的两个数组元素依然是null,直到程序依次将zhang赋给students数组的第一个元素,把lee赋给students数组的第二个元素,students数组的两个数组元素将会指向有效的内存区,此时的内存存储示意图如下图

从图中可以看出:此时zhangstudents[0]指向同一个内存区,而且他们都是引用类型变量,因此通过zhangstudents[0]来访问Person实例的属性和方法的效果完全一样,不论修改students[0]所指向的Person实例 的属性,还是修改zhang变量所指向的Person实例的属性,所修改的其实是同一个内存区,所以必然相互影响,同理,leestudents[1]也是引用到同一个Person对象,也有相同的效果.---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a><a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值