Java对象是如何存储在内存中的?
在Java中,所有对象都在堆上动态分配。这与 C++ 中的对象可以在堆栈或堆上分配内存不同。在 C++ 中,当我们使用 new() 分配对象时,对象分配在堆上,否则如果不是全局或静态的,则在堆栈上分配。
在Java中,当我们只声明一个类类型的变量时,只会创建一个引用(不为对象分配内存)。要将内存分配给对象,我们必须使用 new()。所以对象总是在堆上分配内存(有关更多详细信息,请参阅this)。
例如,以下程序编译失败。编译器给出错误“此处出错,因为 t 未初始化”。
java
class Test {
// class contents
void show()
{
System.out.println("Test::show() called");
}
}
public class Main {
// Driver Code
public static void main(String[] args)
{
Test t;
// Error here because t
// is not initialized
t.show();
}
}
java
class Test {
// class contents
void show()
{
System.out.println("Test::show() called");
}
}
public class Main {
// Driver Code
public static void main(String[] args)
{
// all objects are dynamically
// allocated
Test t = new Test();
t.show(); // No error
}
}
使用 new() 分配内存使上述程序工作。
Java
class Test {
// class contents
void show()
{
System.out.println("Test::show() called");
}
}
public class Main {
// Driver Code
public static void main(String[] args)
{
// all objects are dynamically
// allocated
Test t = new Test();
t.show(); // No error
}
}