数组与内存



packagecn.study.array;

 

/**

 *一旦初始化完成,该数组的长度就不可改变,Java语言允许通过数组的length属性来访问数组的长度。

 *■数组元素的类型是基本类型中的整数类型(byte、short、int和long),则数组元素的值是0。

 *■数组元素的类型是基本类型中的浮点类型(float、double),则数组元素的值是0.0。

 * ■数组元素的类型是基本类型中的字符类型(char),则数组元素的值是'\u0000'。

 * ■数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是false。

 * ■数组元素的类型是引用类型(类、接口和数组),则数组元素的值是null。

 *

 * @author Administrator

 *

 */

public classArrayTest {

 

publicstatic void main(String[] args) {

 

//采用静态初始化方式初始化数组

String[]books = new String[] { "Java", "JavaEE", "Ajax","Xml" };

//采用静态初始化方式初始化数组

String[]names = { "Jobs", "Gates", "lee" };

//采用动态初始化方式初始化数组

String[]strArr = new String[5];

 

System.out.println("第一个数组books的长度:"+ books.length);

System.out.println("第二个数组names的长度:"+ names.length);

System.out.println("第三个数组strArr的长度:"+ strArr.length);

/**

 *Java的数组是静态的,一旦为数组初始化完成,数组元素的内存空间分配即结束,程序只能改变数组元素的值,而无法改变数组的长度。

 */

books= names;

strArr= names;

/**

 *将让books数组变量、strArr数组变量都指向names数组变量所引用的数组,这样做的结果就是books、strArr、

 * names这3个变量引用同一个数组对象。

 */

System.out.println("books= names---------------------");

System.out.println("books的数组长度:"+ books.length);

System.out.println("strArr= names---------------------");

System.out.println("strArr的数组长度:"+ strArr.length);

 

System.out.println("books的第二个元素是:"+ books[1]);

System.out.println("names的第二个元素是:"+ names[1]);

books[1]= "beyond";

System.out.println("books的第二个元素是:"+ books[1]);

System.out.println("names的第二个元素是:"+ names[1]);

}

}

 

输出结果:

第一个数组books的长度:4

第二个数组names的长度:3

第三个数组strArr的长度:5

books =names---------------------

books的数组长度:3

strArr =names---------------------

strArr的数组长度:3

books的第二个元素是:Gates

names的第二个元素是:Gates

books的第二个元素是:beyond

names的第二个元素是:beyond


此时strArr、names和books数组变量实际上引用同一个数组对象。因此,当访问books数组长度、strArr数组的长度时,将看到输出3。这很容易造成一个假象:books数组的长度从4变成了3。实际上,数组对象本身的长度并没有发生改变,变的是books数组变量。books数组变量原本指向堆内存下面的数组,当执行了books=names;语句之后,books数组将改为指向堆内存中间的数组,而原来books变量所引用的数组的长度依然是4。但不再有任何引用变量引用该数组,因此它将会变成垃圾,等着垃圾回收机制来回收。此时,程序使用books、names和strArr这3个变量时,将会访问同一个数组对象,因此把books数组的第2个元素赋值为“beyond”时,names数组的第2个元素的值也会随之改变。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值