你的位置:首页 > 软件开发 > Java > 对象在内存中存在的形式

对象在内存中存在的形式

发布时间:2017-09-24 15:00:14
程序运行起来会在内存划分为如图几个区域:堆区:对象栈区:基本数据类型(String类型也会存放在栈区)全局区:存放全局数据常量区:存放常量代码区:存放代码看下面一段代码public class PersonOBJ{ public static void main(String[] ...

对象在内存中存在的形式

程序运行起来会在内存划分为如图几个区域:

堆区:对象

栈区:基本数据类型(String类型也会存放在栈区)

全局区:存放全局数据

常量区:存放常量

代码区:存放代码

对象在内存中存在的形式

看下面一段代码

public class PersonOBJ{ public static void main(String[] args){  class Person{   int age;   String name;  }  Person a = new Person();  a.age = 10;  a.name = "小明";  Person b = a;
     System.out.println(a.name); System.out.println(b.name); }}

内存图:

存储地址以十六进制表示,存储地址类似房间门牌号,而变量(对象)相当于为门牌号命名,地址分配的十六进制数不是如图所示,而是取决于操作系统的分配。

Person a存放了一个对象(new Person())的地址(比如说[0x123]),Person a其自身也有个地址(比如说[0x111]),

但为了方便就简写成Person a存放了一个(new Person())对象的地址(Person a [0x123])。

对象在内存中存在的形式

Person a =new  Person();会在内存中开辟一个新的堆空间,堆空间存放一个存储地址为0x123的具有Person类属性的Person a对象

在new Person();创建对象后,赋给栈区Person a变量,Person a将引用对象new Person();所在堆区的地址[0x123]

访问并赋值对象属性(a.age=10),会查找对象所在堆区的地址[0x123],并赋值相应属性值;a.name="小明"以此类推。

Person b =a;

Person b仍然在栈区,把a变量(对象)赋给Person b实际上赋的值是堆区类的地址[0x123],

也就是说两个变量指向了堆空间的同一个地址,这也就是为什么看到两个小明的原因。

 

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:对象在内存中存在的形式

关键词:内存

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。