注:本文参考Java疯狂讲义所总结
package com.hujiangjun;
/**
*/
public class ArrayTest01 {
public static void main(String[] args) {
//采用静态初始化方式初始化第一个数组
String[] books=new String[]{
"疯狂Java讲义",
"Java从入门到精通",
"java项目实战",
"java程序员必看书"
};
//采用静态初始化的简化形式初始化第二个数组
String[] names={
"孙悟空",
"猪八戒",
"白骨精"
};
//采用动态初始化的语法初始化第三个数组
String[] strArr=new String[5];
//访问三个数组的长度
System.out.println("第一个数组的长度为:"+books.length);
System.out.println("第二个数组的长度为:"+names.length);
System.out.println("第三个数组的长度为:"+strArr.length);
/*
* main栈区:strArr、names、books
* 堆内存:strArr(null,null,null,null,null)
* names(孙悟空、猪八戒、白骨精)
* books(疯狂Java讲义、Java从入门到精通、java项目实战、java程序员必看书);
* */
//让books数组变量,strArr数组变量指向names所引用的数组
books=names;
strArr=names;
System.out.println("-----------hujiangjun程序运行答案区--------------");
System.out.println("books数组的长度:"+books.length);
System.out.println("strArr数组的长度:"+strArr.length);
//改变books数组所引用的数组的第二个元素值
books[1]="唐僧";
System.out.println("names数组的第二个有元素是:"+books[1]);
System.out.println("-------------------------------------------------");
/*
* 当访问books数组、strArr数组的长度时,输出的结果都是:3。这很容易造成一个假想:books数组从4变到了3.实际上
* 数组本身的长度并没有改变,变的是books数组变量。books数组变量原本指向堆内存下面的数组,当执行了books=names;
* 语句之后,books数组将改为指向堆内存中的数组,而原来books变量所引用的数组长度依然是4;
* 原来books变量所引用的数组长度依然是4,但不再有任何引用变量引用该数组,因此它将会变成垃圾,等着垃圾回收机制
* 来回收,此时,程序使用的books、names和strArr这三个变量时,将会访问同一个数组对象,因此把books数组的第2个元素
* 赋值为"唐僧"时,names数组的第2个元素的值也会随之改变。
* */
}
}
相关截图
2025 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123