Java中 数组的问题分析

释放双眼,带上耳机,听听看~!

注:本文参考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个元素的值也会随之改变。
     * */

    }
    }
    相关截图

【转自慕课】https://www.imooc.com

JAVA

Java高效开发-常用idea插件

2022-3-3 16:33:58

JAVA

3分钟整明白啥是 缓存雪崩

2022-3-3 16:38:20

搜索