首页 > 代码库 > Java千百问_06数据结构(016)_引用类型数组在内存中如何储存

Java千百问_06数据结构(016)_引用类型数组在内存中如何储存

点击进入_更多_Java千百问

1、存放基本类型数组在内存中如何储存

java的数组中可以存放引用类型
存放引用类型的内存分布相比存放基本类型相对复杂。来看一段存储基本类型的程序:
了解什么是数组看这里:java中的数组是什么
了解数组在内存中的储存看这里:java数组如何存储在内存中

public class TestPrimitiveArray {
    public static void main(String[] args) {
        //1.定义数组
        int[] numbers;
        //2.分配内存空间
        numbers = new int[4];
        //3.为数组元素指定值
        for(int i = 1;i <= numbers.length;i++) {
            numbers[i] = i ;
        }
    }
}

内存分布如图:

技术分享

从图中可看出数组元素直接存放在堆内存中,当操作数组元素时,实际上是操作基本类型的变量。

2、存放引用类型数组在内存中如何储存

先来再看一段存储引用类型数组的实例:

class Person {
    public int age;
    public String name;
    public void display() {
        System.out.println(name + "的年龄是: " + age);
    }
}
public class TestReferenceArray {
    public static void main(String[] args) {
        //1.定义数组
        Person[] persons;
        //2.分配内存空间
        persons = new Person[2];
        //3.为数组元素指定值
        Person p1 = new Person();
        p1.age = 28;
        p1.name = "Miracle";
        Person p2 = new Person();
        p2.age = 30;
        p2.name = "Miracle He";
        persons[0] = p1;
        persons[1] = p2;
        //输出元素的值
        for(Person p : persons) {
            p.display();
        }
    }
}

元素为引用类型的数组,在内存中的存储与基本类型完全不一样
此时数组元素存放引用,指向另一块内存,在其中存放有效的数据。如图:

技术分享

了解数组和普通对象的引用变量:数组和普通对象的引用变量有什么区别

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

    Java千百问_06数据结构(016)_引用类型数组在内存中如何储存