我知道在c ++中声明对象实例时如此:
Object object
Run Code Online (Sandbox Code Playgroud)
调用Object构造函数并为该对象提供内存,但是我发现在java中执行此操作时,对象实例在以下情况下没有值:
object = new Object()
Run Code Online (Sandbox Code Playgroud)
是写的.我想特别知道为对象提供内存的时间.我认为构造和新关键字分配内存都是Object object = new Object()多余的.我在oracle的网站上读到了声明"预留"内存和新的"分配"内存,我想知道两者之间有什么区别.
您需要区分变量所需的空间和对象所需的空间.请记住,变量的值只是一个引用 - 非常类似于C++中的指针.所以如果你有:
Object x = null;
Run Code Online (Sandbox Code Playgroud)
然后变量x本身占用足够的空间用于引用(通常为4或8个字节).现在,如果你有:
x = new Object();
Run Code Online (Sandbox Code Playgroud)
创建一个对象 - x现在的值是对新创建的对象的引用.x它本身占用的空间与以前相同,但也有对象本身所需的空间(基本上是字段,对象类型的引用,以及同步和管家的数据).