2、基本类型和引用类型的执行存储流程是怎样的?

目录

[一、先明确:JVM 对变量的存储规则(固定不变)](#一、先明确:JVM 对变量的存储规则(固定不变))

[二、基本类型:int a = 10; int b = 10;](#二、基本类型:int a = 10; int b = 10;)

[1. 存储流程](#1. 存储流程)

[2. 内存样子(栈中)](#2. 内存样子(栈中))

[3. a == b 底层执行](#3. a == b 底层执行)

[三、引用类型:Integer a = new Integer(10); Integer b = new Integer(10);](#三、引用类型:Integer a = new Integer(10); Integer b = new Integer(10);)

[1. 存储流程](#1. 存储流程)

[2. 内存样子](#2. 内存样子)

[3. a == b 底层执行](#3. a == b 底层执行)

[四、一句话总结 == 的底层逻辑](#四、一句话总结 == 的底层逻辑)

五、最容易混淆的点,一次性说透

[1. 为什么 new 一定是不同地址?](#1. 为什么 new 一定是不同地址?)

[2. 为什么基本类型没有地址概念?](#2. 为什么基本类型没有地址概念?)

[3. 为什么引用类型变量本身在栈?](#3. 为什么引用类型变量本身在栈?)

六、最精简记忆版


纯流程、纯内存结构讲一遍。

一、先明确:JVM 对变量的存储规则(固定不变)

  1. 方法内局部变量 :全部放在 虚拟机栈(VM Stack)
  2. new 出来的对象实例 :全部放在 堆(Heap)
  3. 引用变量本身 :存在栈里,存的是堆地址
  4. 基本类型变量 :存在栈里,存的是真实值

二、基本类型: int a = 10; int b = 10;

1. 存储流程

  1. 线程执行到 int a = 10;
  • 在当前栈帧开辟一块小空间
  • 直接把 数值 10 的二进制 存进去
  1. 执行 int b = 10;
  • 再在栈帧开另一块空间
  • 直接把 数值 10 的二进制 存进去

2. 内存样子(栈中)

a: 10
b: 10
没有堆参与, 没有对象,没有地址

3. a == b 底层执行

JVM 执行 数值比较指令(如 if_icmpne 等)
直接读取栈上两块内存的二进制 → 完全一样 → true


三、引用类型: Integer a = new Integer(10); Integer b = new Integer(10);

1. 存储流程

  1. 执行 new Integer(10)
  • 上创建一个 Integer 对象
  • 该对象内部存着值 10
  1. 这个堆对象的内存地址,存入栈上的变量 a

  2. 再次 new Integer(10)

  • 堆上另一个位置再创建一个新对象
  1. 新地址存入栈上变量 b

2. 内存样子

栈:
a = 0x11223344(堆地址1)
b = 0x55667788(堆地址2)
堆:
0x11223344: Integer{ value=10 }
0x55667788: Integer{ value=10 }

3. a == b 底层执行

JVM 不看对象内容
只比较 栈里存的两个地址值
0x11223344 != 0x55667788 → 结果 false


四、一句话总结 == 的底层逻辑

  • 基本类型 == :栈 ↔ 栈,直接比二进制值
  • 引用类型 == :栈 ↔ 栈,比的是两个引用存的堆地址 跟对象内部的值完全无关

五、最容易混淆的点,一次性说透

1. 为什么 new 一定是不同地址?

因为 new 指令的语义就是: 在堆上分配新内存
每次 new 都是一块 全新、独立的内存
所以地址一定不同 → == 一定 false

2. 为什么基本类型没有地址概念?

因为基本类型 不是对象
JVM 设计就是: 值直接存在栈上,不进堆
所以 == 只能是值比较

3. 为什么引用类型变量本身在栈?

因为引用本质是 指针/地址
很小(4或8字节),存在栈里访问极快
对象本体大,放堆里统一管理


六、最精简记忆版

  • 基本类型变量 :栈里存
  • 引用类型变量 :栈里存堆地址
  • == :永远只比较**栈里存的东西。**基本类型 → 比值。 引用类型 → 比地址
相关推荐
不负岁月无痕1 小时前
STL --C++哈希表封装unordered_map/set
c++·visualstudio·哈希算法·散列表·unordered
私人珍藏库9 小时前
[Android] 会计快题库 -财会职称考试刷题学习
android·人工智能·学习·app·软件·多功能
安卓修改大师15 小时前
安卓修改大师 vs MT管理器:反编译工具终极对决与全景解析
android·人工智能·机器翻译
程序员小八77716 小时前
从 0 学习 MySQL 索引——7 大核心精讲
android·学习·mysql
雅客李16 小时前
2026云手机低价机型实测 安卓云手机踩坑测评报告
android·智能手机
蓝速科技17 小时前
蓝速科技鸿蒙广告机替代安卓实测:信创系统下的性能与边界评估
android·科技·harmonyos
雅客李17 小时前
2026云手机高负载压力测评 安卓云手机多开实测数据
android·智能手机·php
千里马学框架19 小时前
google官方Perfetto 中使用 AI相关skill
android·人工智能·ai·framework·perfetto·性能·skill
zhangphil21 小时前
Android RecyclerView图像类ViewHolder离屏缓存数量直接增加Java/View对象内存,间接增加Graphics/GL内存
android
众少成多积小致巨21 小时前
Android C++ 编码规范指南
android·c++·google