news 2026/7/6 16:17:32

详细介绍一下Java中的引用数据类型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
详细介绍一下Java中的引用数据类型

Java 引用数据类型详细讲解

一、核心概念

  1. 分类:除8种基本类型外,其余全是引用数据类型;
  2. 存储原理:
    • 基本类型变量:栈中直接存真实数值
    • 引用类型变量:栈中存对象在堆中的内存地址,通过地址找到堆里的实体数据。
  3. 默认初始值:null(代表没有指向任何对象)。
  4. 共性:都继承自java.lang.Object,拥有 Object 通用方法:toString()equals()hashCode()等。

二、四大类引用数据类型

1. 类(Class)

自定义类、系统内置类都属于引用类型。

// Person是自定义类,p为引用变量Personp=newPerson();
  • new Person():在堆内存创建对象;
  • p:栈内存保存对象地址,指向堆对象。

2. 接口(Interface)

接口本身不能new,只能由实现类对象接收引用。

interfacePlay{}classGameimplementsPlay{}// 多态写法,接口引用指向实现类对象Playplay=newGame();

3. 数组(Array)

数组不管存基本类型还是对象,数组本身都是引用类型。

// int是基本类型,但int[]数组是引用类型int[]arr=newint[5];String[]strArr=newString[3];

4. 字符串 String

特殊引用类型,底层字符数组,写法简化,双引号直接赋值。

Strings1="abc";Strings2=newString("abc");

三、内存图解逻辑(简化)

栈内存:变量名 → 地址值 堆内存:地址对应真实对象/数组数据

示例:

Studentstu=newStudent();
  1. 执行new Student(),堆开辟空间,创建学生对象;
  2. 把对象内存地址赋值给栈中的stu
  3. 使用stu.属性/stu.方法()时,通过地址找到堆对象操作。

四、引用传递特点

引用传递传递的是地址,多个引用可以指向同一个堆对象,一个引用修改对象内容,其他引用同步可见。

classStudent{intage;}publicclassTest{publicstaticvoidmain(String[]args){Students1=newStudent();s1.age=18;// s2和s1指向同一个对象Students2=s1;s2.age=20;System.out.println(s1.age);// 输出20}}

五、null 空引用

  1. null表示引用变量不指向任何堆对象;
  2. 若用null调用方法/属性,抛出NullPointerException空指针异常;
Stringstr=null;str.length();// 报错空指针

六、引用类型 vs 基本类型对比

对比项基本数据类型引用数据类型
存储内容真实数值对象内存地址
内存位置栈内存栈存地址,堆存实体
数量固定8种无限,可自定义类
默认值0、0.0、false、‘\u0000’null
参数传递值传递(拷贝数值)引用传递(拷贝地址)
是否继承Object不继承全部继承Object

七、常见子类举例

  1. 类:StringScannerArrayList、自定义实体类;
  2. 数组:int[]double[]String[]、自定义类数组;
  3. 接口:ListRunnableComparable
  4. 包装类特殊说明:IntegerDouble属于引用类型,对应基本类型的包装。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 16:16:14

从零入门激光SLAM(十五)——IMU在SLAM中的用处

1. IMU在激光SLAM中的核心作用 第一次接触IMU时,我完全被这个小巧的传感器震撼到了——它居然能在没有外部参考的情况下,仅凭内部测量就推算出设备的运动状态。在激光SLAM系统中,IMU就像是一位不知疲倦的"内部观察者",…

作者头像 李华
网站建设 2026/7/3 14:15:27

MTEX终极指南:免费Matlab工具箱快速掌握晶体学分析

MTEX终极指南:免费Matlab工具箱快速掌握晶体学分析 【免费下载链接】mtex MTEX is a free Matlab toolbox for quantitative texture analysis. Homepage: 项目地址: https://gitcode.com/gh_mirrors/mt/mtex 想要在材料科学和地质学研究中快速上手晶体学分析…

作者头像 李华
网站建设 2026/7/3 3:47:56

Cython 性能优化:从 Python 到 C 的零拷贝桥接与类型化内存视图

Cython 性能优化:从 Python 到 C 的零拷贝桥接与类型化内存视图 一、Python 的 GIL 与解释器开销:何时需要 Cython Python 的动态类型和解释执行模型带来了极高的开发效率,但在计算密集型任务中,这两个特性构成了性能天花板。具体…

作者头像 李华
网站建设 2026/7/3 1:47:28

基于Python与CANoe的汽车诊断自动化测试框架实战

1. 项目概述与核心价值 上次我们聊了如何用pytestallureexcel这套组合拳来搭建诊断自动化测试的框架思路,把测试用例、测试数据和测试执行逻辑给拆分开。今天,咱们就进入最硬核的部分——代码实现与实战解析。如果你还没看过上一篇,建议先回…

作者头像 李华
网站建设 2026/7/3 15:16:03

S32K看门狗组件实战:从配置到喂狗的全流程解析

1. S32K看门狗组件入门指南 第一次接触S32K系列MCU的看门狗功能时,我完全被各种专业术语搞晕了。什么窗口模式、超时时间、中断服务函数,听起来就像在说外星语。但经过几个项目的实战后,我发现看门狗其实就像你家的宠物狗 - 你得定期喂它&am…

作者头像 李华
网站建设 2026/7/3 23:42:34

从数据手册到PCB:USB Micro引脚原理图设计与阻抗匹配实战

1. 从数据手册到PCB:USB Micro引脚设计全流程 第一次接触USB Micro引脚设计时,我盯着GD32F103XX数据手册里PA11和PA12的备选功能描述发了半小时呆。USBDM和USBDP这两个看似简单的差分信号引脚,背后藏着阻抗匹配、信号完整性、设备枚举等一整…

作者头像 李华