【Java基础知识(1)】对象在内存中的存储

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

在Java中,所有的对象被动态地分配在堆中。这和C++不同,C++允许对象被存储在堆或者栈中。

参考Oracle官方文档:官方文档说明

在Java中创建字符串对象的2种方法:

1、 使用String关键字;
2、 使用new关键字。

(1) 使用String关键字:
使用双引号代表字符串。举例:

String str1 = "GFG";
String str2 = "GFG";

该操作在内存中的表示:

【Java基础知识(1)】对象在内存中的存储_第1张图片

每当一个String表示被创建,JVM会首先检查该字符串是否在字符串常量池(String constant pool)中存在。若已存在,则返回一个对该实例的引用;若不存在,则在常量池中创建一个新的字符串实例。因此在上述例子中,事实上只有1个对象被创建。

(2) 使用new关键字:

举例:

String str1 = new String("GFG");
String str2 = new String("GFG");

上述操作在内存中的表示:

【Java基础知识(1)】对象在内存中的存储_第2张图片
每当一个字符串对象被创建,JVM会将其在堆内存中创建。在上述实例中,JVM不会检查该字符串是否已经存在。无论如何,每个字符串对象都会获得独自的内存空间。

如下程序会报错:

class Test
{
    void show()
    {
        System.out.println("Test::show() called");
    }
}

public class Main()
{
    public static void main(String[] args)
    {
        Test t;
        t.show();
    }
}

要消除该报错,只需将主函数中的

Test t;

修改为

Test t = new Test();

即可。

参考:

GeeksforGeeks.

你可能感兴趣的:(Java,java,开发语言)