让人混淆的Person p=new Person();和Person p=null;

一、 对 Person p=new Person()的理解要理解这个问题,首先要知道整个过程中内存中发生了什么!我们知道,内存中我们最常用的就是三个:栈、堆、方法区。其中对于基本值类型和引用变量(就是User user;中的user)来说,它们是存储在栈内存中的;而new出来的东西都是存储在堆内容中;而成员变量和成员方法在随着类的加载存储在方法区中。Person p=new Person();其实是两行代码的合并,我们将其分开再结合内存可以更好的理解这个问题。 Person p=new Person(
摘要由CSDN通过智能技术生成

一、 对 Person p=new Person()的理解

  1. 要理解这个问题,首先要知道整个过程中内存中发生了什么!我们知道,内存中我们最常用的就是三个:栈、堆、方法区。其中对于基本值类型和引用变量(就是User user;中的user)来说,它们是存储在栈内存中的;而new出来的东西都是存储在堆内容中;而成员变量和成员方法在随着类的加载存储在方法区中。
  2. Person p=new Person();其实是两行代码的合并,我们将其分开再结合内存可以更好的理解这个问题。 Person p=new Person();其实等价于 Person person; person=new Person();文章最后会简单讲一下Person person = new Person(); Person person=null;的区别
  3. 下面我们就可以去更深入的去理解这个问题了。创建一个对象都在内存中做了什么事情?
  • 3.1.JVM先将硬盘上指定位置的Person.class文件加载进内存(如果该对象有直接父类则会先加载父类)----方法区也称为数据区。
  • 3.2.执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main 方法的栈区分配了一个变量p。— 这个可以将p看成一个引用变量(存在于main的栈内存中)
  • 3.3执行new Person():在堆内存中开辟一个实体空间,然后将成员变量和成员方法放在new实例中。将该对象的成员变量默认实例化,int类型为0,String类型为null…,同时产生一个堆内存首地址值。
  • 3.4.调用该实体对应的构造函数,进行构造函数初始化
  • 3.5
  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值