`
cakin24
  • 浏览: 1402847 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

四张內存变化图揭秘引用类型数组的初始化

    博客分类:
  • java
阅读更多

一代码示例

class Person
{
	public int age; // 年龄
	public double height; // 身高
	// 定义一个info方法
	public void info()
	{
		System.out.println("我的年龄是:" + age
			+ ",我的身高是:" + height);
	}
}
public class ReferenceArrayTest
{
	public static void main(String[] args)
	{
		// 定义一个students数组变量,其类型是Person[]
		Person[] students;   //a
		// 执行动态初始化
		students = new Person[2];  //b
		// 创建一个Person实例,并将这个Person实例赋给zhang变量
		Person zhang = new Person();
		// 为zhang所引用的Person对象的age、height赋值
		zhang.age = 15;
		zhang.height = 158;
		// 创建一个Person实例,并将这个Person实例赋给lee变量
		Person lee = new Person();
		// 为lee所引用的Person对象的age、height赋值
		lee.age = 20;
		lee.height = 172;        //c
		// 将zhang变量的值赋给第一个数组元素
		students[0] = zhang;
		// 将lee变量的值赋给第二个数组元素
		students[1] = lee;          //d
		// 下面两行代码的结果完全一样,因为lee
		// 和students[1]指向的是同一个Person实例。
		lee.info();
		students[1].info();
	}
}

二运行结果
我的年龄是:20,我的身高是:172.0
我的年龄是:20,我的身高是:172.0

三结果分析





  

 

 
图一是a段代码执行完后的内存情况。
图二是b段代码执行完后的內存情况。
图三是c段代码执行完后的内存情況。
图四是d段代码执行完后的内存情况。

  • 大小: 12.5 KB
  • 大小: 14.6 KB
  • 大小: 21.7 KB
  • 大小: 23.8 KB
分享到:
评论

相关推荐

    C++中静态初始化数组与动态初始化数组详解

    在C++编程中,数组的初始化是进行数据操作前的一个重要步骤,它直接影响到程序的运行效率和内存管理的复杂性。本文将对C++中的两种数组初始化方式——静态初始化与动态初始化进行详解,帮助读者更好地理解和应用这两...

    java代码-例子4-6 用字节数组初始化String对象

    在实际开发中,我们可能会遇到需要从字节数组初始化String对象的情况。这个例子4-6就是为了展示这种操作的具体实现。让我们详细探讨一下这个话题。 首先,我们要理解String类的基本构造函数之一,它接受一个字节...

    2020老杜最新Java零基础进阶视频教程-数组课件

    同时,`ArrayTest02`展示了引用类型数组(`Student[] student`)的声明和初始化,以及`Student`类的定义。`ArrayTest03`中虽然没有完整的代码,但可以看出继续探讨引用类型数组的使用,特别是初始化和赋值的过程。 ...

    值类型与引用类型(.html)

    - 非零初始化:未初始化的引用类型变量默认为null。 3. 类与结构的区别 - 结构(Struct)是值类型,而类(Class)是引用类型。 - 结构的实例化和操作更高效,类则支持更复杂的继承和多态。 - 结构不支持继承,而类...

    Java数组练习题(带答案).docx

    9. **数组的声明、创建和初始化**:数组初始化包括定义数组类型、指定数组长度以及赋值,如`int[] nums = new int[10]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};` 10. **数组越界异常**:如果尝试访问数组不存在的下标,如`...

    java【第4章:数组与方法】_数组的引用传递.

    在第四章“数组与方法”中,我们重点探讨了数组的引用传递这一关键概念。理解这个概念对于编写高效、可维护的Java代码至关重要。 首先,数组在Java中被视为对象,这意味着它们在内存中的存储方式与其他对象相同。当...

    Unity3D中数组定义贴图代码2

    在`Start()`方法中,一般会初始化脚本中的变量,但在这个例子中,没有进行任何初始设置。 在`Update()`方法中,监听了F11键的按下事件。当F11键被按下时,`y`的值会递增,并调用`mm`方法来改变贴图。通过这种方式,...

    st7701_3线SPI初始化代码.zip

    3. **初始化序列**:ST7701的初始化需要一系列特定的寄存器设置,这些设置定义了屏幕的分辨率、电压源、偏压比、像素格式等。初始化序列通常包括写入多个命令字节到ST7701的特定地址。 4. **写命令/数据**:通过...

    交错数组和多维数组分析

    然后可以分别初始化这三个数组: ```csharp jaggedArray[0] = new int[] {1, 2, 2, 2, 2, 2}; jaggedArray[1] = new int[] {3, 3, 34, 4, 4, 8}; jaggedArray[2] = new int[] {444, 333, 3, 33, 33, 3, 3, 3, 3, 3}...

    c++结构体的初始化和赋值1

    如果只给出了部分初始值,剩余的成员将使用默认的零初始化(对于数值类型通常是0,对于引用和指针是NULL,对于类类型是调用默认构造函数)。 比如定义一个结构体X: ```cpp struct X { int i; float f; char c; ...

    波形图表系统时间初始化设置_labview图标系统时间_

    在LabVIEW编程环境中,波形图表是用于可视化...掌握以上知识点后,你就能在LabVIEW中有效地设置和初始化波形图表的系统时间,创建出能够实时反映系统时间变化的动态图表了。这在监控、数据分析和测试应用中非常有用。

    数据结构多维数组课程设计

    - **目的:** 定义并模拟实现一种整型多维数组类型。 - **特点:** 支持任意整数开始的连续整数作为下标。 - **功能要求:** - 定义整型多维数组类型(以3维为例)。 - 下标变量赋值,并进行下标范围检查。 - 同...

    2个数组指向同一个空间.txt

    为将一个数组初始化可以使用 new 关键字,也可以使用赋值语 句进行初始化。数组一旦被创建,就不能改变它的大小。 例如: a = new int[10]; //将 a 初始化为大小为 10 的整型数组。 int[] b = {0,1,2,3} //将 b ...

    以太坊Solidity未初始化存储指针安全风险浅析.pdf

    根据Solidity的官方手册,结构体作为局部变量时默认存储位置是storage,因此,如果它没有被初始化,它的内部字段可能会错误地引用到其他变量,导致合约状态被破坏。 #### 解决方案 文档中为结构体和数组的未初始化...

    易语言重定义多维数组

    在易语言中,动态调整数组大小的能力是非常有用的,特别是在程序运行过程中需要根据需求变化调整存储空间的情况。下面我们将深入探讨这个主题。 首先,让我们了解一下“重定义”多维数组的概念。在传统的编程中,...

    大位数加减法,支持INT类型数组,支持单元多位数存储,支持多位数输入到数组,支持返回运算后结果数组,支持运算后输出到文件开关

    C++目前实现大位数加减法,支持INT类型数组,并支持单元多位数存储,从而轻松扩展数组存储达到最大位数。如声明十万数组每单元存储一位数则可以运算十万位数,扩展每单元存储8位数则可达到80万位数的运算,INT安全才...

    C语言二维数组PPT学习教案.pptx

    本篇将详细阐述二维数组的定义、内存存储、初始化及引用方式。 1. 二维数组的定义与内存存储 二维数组可以视为特殊的一维数组,其元素是另一个一维数组。例如,对于一个3x4的二维数组a,可以理解为一个包含3个元素...

    Java基础--基本数据类型与引用数据类型在内存结构上的区别

    数据类型与引用数据类型在内存结构上的主要区别在于它们存储方式和内存分配的不同。在Java中,数据类型分为两种:基本数据类型(如int、char、boolean等)和引用数据类型(如对象、数组等)。 一、基本数据类型 ...

    c++数组实验

    - **初始化**:可以通过嵌套循环或者直接初始化列表来初始化二维数组。 - 使用循环:`for (int i = 0; i ; i++) for (int j = 0; j < 4; j++) cin >> b[i][j];` - 直接初始化:`int b[3][4] = {{1, 2, 3, 4}, {5, ...

    多维数组下标计算 多维数组下标计算 多维数组下标计算

    多维数组是指具有多个维度的数组,这种数组可以表示为矩阵、立方体、四维数组等形式。 一、数组(向量) 数组是一种基本的数据结构,广泛应用于编程语言中。数组可以看作是一种容器,存储多个具有统一类型的数据...

Global site tag (gtag.js) - Google Analytics