当'new'运算符使用构造函数初始化内存时,JVM会做什么?

Sha*_*han 17 java constructor new-operator

RealEstate v = new RealEstate();
Run Code Online (Sandbox Code Playgroud)

我用过这个new关键字RealEstate().我知道new分配内存并使用RealEstate类构造函数初始化内存.

JVM在这做什么?

Ram*_*asi 14

newoperator实际上并没有使用构造函数的帮助来分配内存.它与构造函数无关.基本上Java的版本mallocnew.

new 运营商:

  • 为对象分配内存
  • 调用对象构造函数
  • 返回对该内存的引用

构造函数单独执行以在初始化期间执行任何操作,例如将值分配给对象和变量.如果没有定义构造函数,则编译器将创建默认构造函数并将分配默认值:


下表总结了几种数据类型的默认值. 资源

Data Type   Default Value (for fields)
byte            0
short           0
int             0
long            0L
float           0.0f
double          0.0d
char            '\u0000'
String          null
any object      null
boolean         false
Run Code Online (Sandbox Code Playgroud)

因此,newoperator只分配内存并返回对该内存的引用.

查看文档:

new运算符通过为新对象分配内存并返回对该内存的引用来实例化一个类.new运算符还调用对象构造函数.

  • 不,Java不为每个对象使用malloc.实际上,通过在称为TLAB(线程局部分配缓冲区)的区域中递增指针,实际上开销要少得多.接下来发生的事情在Java语言规范中指定,这包括运行类层次结构的初始化器和构造器.在此之前,对象的实际类也被构造和初始化.https://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.5 (8认同)