Java对象是如何在内存中存储的?
在Java中,所有的对象被动态地分配在堆中。这和C++不同,C++允许对象被存储在堆或者栈中。
参考Oracle官方文档:官方文档说明
在Java中创建字符串对象的2种方法:
1、 使用String关键字;
2、 使用new关键字。
(1) 使用String关键字:
使用双引号代表字符串。举例:
String str1 = "GFG";
String str2 = "GFG";
该操作在内存中的表示:
每当一个String表示被创建,JVM会首先检查该字符串是否在字符串常量池(String constant pool)中存在。若已存在,则返回一个对该实例的引用;若不存在,则在常量池中创建一个新的字符串实例。因此在上述例子中,事实上只有1个对象被创建。
(2) 使用new关键字:
举例:
String str1 = new String("GFG");
String str2 = new String("GFG");
上述操作在内存中的表示:
每当一个字符串对象被创建,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.