You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中对象与非静态变量的内存分配相关问题咨询

结论先行:系统会给对象分配真实的内存地址,对象本身有实际的内存存储空间,不是仅用来访问变量的虚拟概念。

给你举个很好理解的生活类比:
你写的Java类就相当于一张「户型设计图」,你在类里定义的int a这类非静态变量,就相当于图纸上标注的「卧室」「书房」这类功能区——图纸只是告诉你这套房子应该有哪些空间,但本身不是实际的房子。
你每执行一次new 类名()创建对象,就相当于拿着这张图纸实际盖了一套房子:

  • 每套盖好的房子都有唯一的门牌号,这就是系统给对象分配的真实内存首地址
  • 每套房子里的卧室、书房都是完全独立的,你往A家卧室放东西,完全不会影响B家的卧室,这就是老师说的obj.a和obj1.a互不干扰的原因

内存分配的实际逻辑也和盖房子逻辑一致:

  1. 创建对象时,系统首先会在堆内存区域划出一块连续的空闲空间,给这个新对象使用,这块空间有自己唯一的内存地址
  2. 接下来系统会把当前类定义的所有非静态变量,按固定规则存到刚才给对象划好的这块空间里,每个变量在对象的整体空间里都有自己的小偏移位置
  3. 你代码里写的obj本质是存在栈里的一个「引用标识」,它存的就是这个对象的内存首地址,你调用obj.a的时候,系统会先找到obj存的首地址,再按a对应的偏移位置定位到变量的实际存储位置,就能完成读写操作了

补充个你现在不用深究但可以了解的小知识:对象的内存空间里除了存你定义的非静态变量,还要存一些Java运行需要的底层信息(比如对象所属的类信息、锁状态信息等),这些内容都是真实占用内存的,也进一步说明对象不是虚拟概念。

内容的提问来源于stack exchange,提问作者bruhmoment

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:15:05