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

简介:

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();
        }
    }
}




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

这里写图片描述

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


原文地址:http://blog.csdn.net/ooppookid/article/details/51405466











相关文章
|
1天前
|
存储 算法 Java
数据结构与算法 数组和链表
数据结构与算法 数组和链表
6 0
|
1天前
|
存储 索引
深入浅出数据结构之数组
深入浅出数据结构之数组
|
2天前
|
存储 算法 Java
了解Java内存管理与垃圾回收机制
了解Java内存管理与垃圾回收机制
5 0
|
3天前
|
存储 安全 Java
Java一分钟之Java数据类型概览:基本类型与引用类型
【5月更文挑战第7天】本文概述了Java中的基本和引用数据类型,强调了理解它们对高效编程的重要性。基本类型包括数值、布尔和字符类型,而引用类型涉及类、接口、数组等。注意基本类型的精度损失和溢出问题,以及引用类型的空指针异常和内存泄漏。通过明确类型范围、使用包装类、空值检查和及时释放资源来避免这些问题。代码示例展示了基本类型和引用类型的使用。理解这些核心概念有助于编写更健壮的Java代码。
12 1
|
3天前
|
算法 测试技术 C++
【栈 最小公倍数 最大公约数】2197. 替换数组中的非互质数
【栈 最小公倍数 最大公约数】2197. 替换数组中的非互质数
【栈 最小公倍数 最大公约数】2197. 替换数组中的非互质数
|
4天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
16 0
|
8天前
3.默认值不一样【重点】 局部变量:没有默认值,如果要想使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样 4.内存的位置不一样(了解) 局部变量:位于栈内存 成员变量:位于堆内存 5生命周期不一样(了解)
3.默认值不一样【重点】 局部变量:没有默认值,如果要想使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样 4.内存的位置不一样(了解) 局部变量:位于栈内存 成员变量:位于堆内存 5生命周期不一样(了解)
15 0
|
10天前
|
存储 Java
深入理解Java虚拟机:JVM内存模型
【4月更文挑战第30天】本文将详细解析Java虚拟机(JVM)的内存模型,包括堆、栈、方法区等部分,并探讨它们在Java程序运行过程中的作用。通过对JVM内存模型的深入理解,可以帮助我们更好地编写高效的Java代码,避免内存溢出等问题。
|
11天前
|
存储 Java C语言
【Java探索之旅】基本类型与引用类型 数组的应用 二维数组
【Java探索之旅】基本类型与引用类型 数组的应用 二维数组
13 0
|
11天前
|
存储 机器学习/深度学习 Java
【Java探索之旅】数组使用 初探JVM内存布局
【Java探索之旅】数组使用 初探JVM内存布局
25 0