我对字符串有一些疑问
它们是存储在堆上还是字符串池中?
如果存储在堆上,那么只要没有任何活动线程引用它们,它们就会被垃圾回收。
如果存储在字符串池中,那么它们将如何被删除或移除,因为我们知道垃圾回收只发生在堆上。
我对字符串有一些疑问
它们是存储在堆上还是字符串池中?
如果存储在堆上,那么只要没有任何活动线程引用它们,它们就会被垃圾回收。
如果存储在字符串池中,那么它们将如何被删除或移除,因为我们知道垃圾回收只发生在堆上。
String s = new String("abc");
s所引用的字符串对象将位于堆上,而字符串字面值“abc”将位于字符串池中。字符串池中的对象不会被垃圾回收。它们在程序的生命周期内被重复使用,以提高性能。
字符串Alex进入文字池,只要进程运行(或Web应用程序保持加载状态),它就会一直留在那里,如finnw所说,并且永远不会被垃圾回收。字符串name2不为“Alex”分配内存,而是从文字池中重复使用。
PS:文字池也在堆上。
对于字符串John,创建了两个对象,引用名称为name3和name4,这些对象可以被垃圾回收。
String name = "Alex";
String name2 = "Alex";
String name3 = new String("John");
String name4 = new String("John");