Java中数组引用和内存理解

源码

/*
    数组引用
*/

class Array1{
    public static void main(String[] args){
        // 定义多维Person对象
        Person[] students;
        // 初始化两个对象
        students = new Person[2];
        
        //定义一个person对象,静默初始化
        Person zhang = new Person();
        //对zhang实例属性赋值
        zhang.age = 18;
        zhang.height = 188;

        //定义一个person对象,静默初始化
        Person li = new Person();
        //对zhang实例属性赋值
        li.age = 20;
        li.height = 200;

        //给students实例赋值, 实际是引用,只有基本数据数据类型会赋值,引用类型都是引用
        students[0] = zhang;
        students[1] = li;

        //输出
        zhang.info();
        students[0].info();
        li.info();
        students[1].info();

        //修改li实例
        li.age = 22;
        li.height = 220;
        li.info();
        students[1].info();
    }
}

class Person{
    public int age;
    public int height;

    public void info(){
        System.out.println(age + " : " + height);
    }
}

输出

H:\Code\Java\learn\array>java Array1
18 : 188
18 : 188
20 : 200
20 : 200
22 : 220
22 : 220

1.定义多维Person对象

开始只是在栈内存中申请了内存,定义了引用变量

Java中数组引用和内存理解_第1张图片
image.png

2.动态初始化studnets实例

在堆内存里声明两块内存,引用变量默认赋值为null

Java中数组引用和内存理解_第2张图片
image.png

3.静默初始化zhang实例

先在栈内存有了空间,再在堆内存声明变量,赋默认值

Java中数组引用和内存理解_第3张图片
image.png

4.给zhang对象属性赋值

Java中数组引用和内存理解_第4张图片
image.png

5.li对象同上

Java中数组引用和内存理解_第5张图片
image.png

6.给students赋值,实际是引用(就是同一个东西,都很多名称)

让它指向其他对象

Java中数组引用和内存理解_第6张图片

7.修改students[]或zhang的值,另一个对象也在改变

引用(就是同一个东西,都很多名称)

Java中数组引用和内存理解_第7张图片
image.png

这是笔者的理解,有什么不足的地方请指出

你可能感兴趣的:(Java中数组引用和内存理解)