java对象在创建和赋值时内存的执行流程

Posted 来根蘭州

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java对象在创建和赋值时内存的执行流程相关的知识,希望对你有一定的参考价值。

Person p1 = new Person();
p1.age = 10;
p1.name = "小明";
Person p2 = p1;
System.out.println(p2.age);


//1.先加载静态值,Person类的属性和方法
Person p1 = new Person();
//2.因为new在堆中开辟空间,创建Person对象并生成地址,把地址返回给p1,然后p1通过地址指向对象
//因为静态加载了Person类,所以属性已知,此时没有赋值,属性ageg和name为该数据类型的默认值0和null
p1.age = 10;
//3.先找到p1,在通过地址找到堆中的age,然后赋值10
p1.name = "小明";
//4.先找到p1,在通过地址找到堆中的name,因为是String类型字符串常量,则在常量池生成"小明"和地址
//再把地址返回给堆中的name,然后堆中的name通过地址指向常量池中的"小明"
Person p2 = p1;
//5.把p1赋给p2,p2指向p1,p2和p1是指向的同一个对象
System.out.println(p2.age);
//6.通过地址找到堆中对象里的属性age,值为10
//7.如果通过p2修改对象属性,因为p2p1是指向的同一个对象,则通过p1去访问的也是修改之后的值

只要是数据空间就会有地址!!!

 

以上是关于java对象在创建和赋值时内存的执行流程的主要内容,如果未能解决你的问题,请参考以下文章

Android ART虚拟机 对象创建内存分配流程

Java基础—java创建对象相关

C++中内存分配问题

单例设计模式和Java内存模型

Android Dalvik虚拟机 对象创建内存分配流程

Android Dalvik虚拟机 对象创建内存分配流程