📜  Java对象是如何存储在内存中的?

📅  最后修改于: 2022-05-13 01:54:53.927000             🧑  作者: Mango

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
    }
}