有人请澄清我下面的内容,以便更好地掌握java内存分配和管理。谢谢。
Q1) 以下 3 个代码片段之间的区别是什么:为什么存在三个不同的部分? (就内存分配的时候而言)
片段1:
Class C
{
StringBuffer sb = new StringBuffer();
C(){}
}
片段2:
Class C
{
StringBuffer sb;
C()
{
sb = new StringBuffer();
}
}
片段3:
Class C
{
C()
{
StringBuffer sb = new StringBuffer();
}
}
Q2)如何维护在没有任何引用变量的情况下创建的对象。 例如,new C(); new C().Hello(); 如何理解它们的内存管理、默认值、作用域!!
Q3) 以下 2 个片段之间的差异:
片段1
Class C
{
int a;
C(){}
}
片段2
Class C
{
C(){int a;}
}
最佳答案
Q1) 片段 1 和片段 2 是等价的。如果C
类有多个构造函数,就会出现差异。在片段 1 变体中,您只需编写一次初始化,在片段 2 变体中,您需要在每个构造函数中编写初始化。
在片段 3 中,变量 sb
是构造函数中的局部变量,并且仅在构造函数中可见。当构造函数结束时,StringBuffer
对象可以被垃圾回收。
Q2) 不会被维护,创建后会立即被垃圾回收。在 new C().Hello();
的情况下,仅保证对象存在,直到 Hello()
方法退出。
Q3) 片段 1 声明类字段,片段 2 声明构造函数中的局部变量。
关于java - Java中的内存分配和管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726240/