我知道在 C++ 中声明对象实例时是这样的:
Object object
调用对象构造函数并为该对象提供内存,但是我发现当您在 java 中执行此操作时,对象实例没有值,直到:
object = new Object()
写了。我想具体知道什么时候为对象提供内存。我认为构造和 new 关键字都分配了内存,所以 Object object = new Object()
似乎是多余的。我在 oracle 的网站上看到声明“保留”内存和新的“分配”内存,我想知道这两者之间有什么区别。
最佳答案
您需要区分变量 所需的空间和对象 所需的空间。请记住,变量的值只是一个引用——非常像 C++ 中的指针。所以如果你有:
Object x = null;
那么变量x
本身就占用了足够的引用空间(通常是4或8字节)。现在,如果您有:
x = new Object();
创建一个对象 - x
的值现在是对新创建对象的引用。 x
本身占用的空间与以前相同,但对象本身也需要空间(主要是字段、对象类型的引用以及同步和内部数据)保持)。
关于java - java对象的内存预留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29633618/