`
cakin24
  • 浏览: 1396281 次
  • 性别: 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类的基本构造函数之一,它接受一个字节...

    老生常谈java中的数组初始化

    // 这里只是改变引用,不会改变已初始化的数组 ``` 但反向操作是不允许的,因为动态初始化(`{"A", "B", "C"}`)一旦完成,数组就已经固定,不能再改变其结构: ```java String str7[] = new String[3]; // 先动态...

    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. **数组越界异常**:如果尝试访问数组不存在的下标,如`...

    Unity3D中数组定义贴图代码2

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

    关于oracle初始化参数研究的一组文档

    一、主要初始化参数类型 1. 固定参数:这些参数不能在数据库运行时更改,只能通过重新创建或修改初始化参数文件来调整。 2. 动态参数:也称为可调整参数,可以在数据库运行时通过ALTER SYSTEM命令进行修改。 二、...

    st7701_3线SPI初始化代码.zip

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

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

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

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

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

    C语言程序设计:第9章 数组.pdf

    数组的初始化可以在定义时完成,可以只初始化一部分元素,其余元素默认初始化为0(对于基本类型)。对于外部和静态数组,未初始化的元素会被自动赋值为0。 9.4 数组作为函数参数 在C语言中,可以将数组作为函数参数...

    动态二维数组的应用

    本篇文章将详细探讨动态二维数组的初始化、操作以及通过不同方式实现动态二维数组的方法。 首先,让我们了解动态数组的基本概念。动态数组与静态数组的主要区别在于,静态数组在编译时就需要确定其大小,而动态数组...

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

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

    用C语言创建动态数组

    1. **初始化动态数组**:首先需要分配一段内存空间作为数组的初始空间。通常会先设定一个较小的初始大小,例如128个元素。 ```c int current_element = 0; // 当前元素数量 int total_element = 128; // 总元素...

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

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

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

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

    数组的简短小练习

    1. 声明与初始化:在编程语言中,我们需要声明数组并指定其类型和大小。例如,在Java中,`int[] numbers = new int[5];`声明了一个包含5个整数的数组。初始化则可以一次性为所有元素赋值,或者在声明时逐个赋值。 2....

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

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

    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