AI全栈开发 - Java:基本数据类型 vs 引用数据类型的内存存储

Java 中的基本数据类型和引用数据类型在内存中的存储是怎样的呢?

1. 基本数据类型(Primitive Types)

包含: byte, short, int, long, float, double, char, boolean

存储过程:

  • 存储位置:栈(Stack)
  • 变量的值直接存储在栈内存中
  • 声明时直接分配固定大小的内存空间(大小由类型决定,如 int 占 4 字节)
  • 栈内存由系统自动管理,方法执行完毕即释放
ini 复制代码
栈内存:
┌─────────────┐
│ int a = 10  │  ← 直接存储值 10
├─────────────┤
│ double b=3.14│  ← 直接存储值 3.14
└─────────────┘

特点: 访问速度快、生命周期由作用域控制、赋值是值拷贝

2. 引用数据类型(Reference Types)

包含: 类(class)、接口(interface)、数组([])、枚举(enum)

存储过程(分两步):

  1. 栈(Stack): 存储引用变量(即对象的内存地址,类似指针)
  2. 堆(Heap): 存储对象的实际数据
ini 复制代码
栈内存:                         堆内存:
┌─────────────────┐             ┌──────────────────┐
│ Person p = 0x123│──地址指向──→ │  name = "张三"   │
└─────────────────┘             │  age = 25        │
                                │  ...             │
                                └──────────────────┘

赋值时的区别: 引用类型赋值传递的是地址,多个引用可指向同一对象

java 复制代码
Person p1 = new Person("张三", 25);
Person p2 = p1;          // p2 和 p1 指向同一个堆对象
p2.setName("李四");       // p1.getName() 也会变成 "李四"

3. 关键对比总结

对比维度 基本数据类型 引用数据类型
栈存储 存值本身 存地址(指针)
堆存储 无 存实际对象数据
赋值行为 值拷贝(独立) 地址拷贝(共享)
== 比较 比较值 比较地址(是否同一对象)
默认值 有固定默认值(如 0, false) null
垃圾回收 方法结束自动释放 GC 回收无引用的堆对象

一句话总结: 基本数据类型 "人就在栈里" ,引用数据类型 "栈里只是门牌号,人住在堆里"。

相关推荐
ManageEngineITSM2 小时前
工单优先级怎么定?影响×紧急度矩阵的设计与落地方法
java·大数据·运维·前端·数据库·变更管理
智商网输送线配件2 小时前
电子制造零散耗材补货实战:小批量混批采购平台怎么选才不停机?
大数据·服务器·前端·数据库·自动化
梦帮科技2 小时前
Web 漏洞攻防深度:WAF 规则逃逸技术(畸形分块传输、双重编码)与对抗加固
linux·前端·网络安全·ssl·web
\光辉岁月/2 小时前
15.JavaSE-网络
java·开发语言·网络
const_qiu2 小时前
第二章 2.4:搭建 Monorepo 骨架 + 共享包 @autix/contracts
java·人工智能·arcgis
兰亭妙微UI设计公司2 小时前
兰亭妙微软件界面设计公司的解锁按钮设计10大密码
开发语言·前端·javascript
迪幻3 小时前
封装自己的 npm 依赖并存储到个人 GitHub
前端·npm·github
wangchunyu1143 小时前
JDK8新特性实战(Lambda、Stream、Optional)
java·开发语言
JosieBook3 小时前
【多线程】两台机器同时抢一个字典:一次并发 Bug 的排查
java·网络·bug
牛战士coding3 小时前
LLM 选错工具怎么办?提示词之外还需要确定性规则兜底
java·人工智能