注:本文参考Java疯狂讲义所总结
package com.hujiangjun;
/**
- java数组是静态的
- 数组的初始化有两种方式:
- 静态初始化:初始化时有程序员显式指定每个数组元素的初始值,由系统决定数组的长度
- 动态初始化:初始化时由程序员决定数组长度,由系统为数组元素分配初始值
- 注意:不管采用那种方式初始化Java数组,一旦初始化完成,该数组的长度就不可改变,通过length属性来访问数组的长度
- 不要同时使用静态和动态初始化,也就是说,不要在进行数组初始化时,既指定数组的长度,也为每个数组分配初始值
- 需要指出的是,Java的数组变量是一种引用类型变量
-
*/
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个元素的值也会随之改变。 * */
}
}
相关截图