JAVA中字符串的不变性

JAN*_*JAN 2 java string garbage-collection immutability

考虑一下代码:

public class Stringer {

    public static void main(String[] args) {

        String s1 = "SomeLine";
        System.out.println(s1);  // prints SomeLine
        s1 = "AnotherLine";
        System.out.println(s1);  // prints AnotherLine
    }

}
Run Code Online (Sandbox Code Playgroud)

当我改变s1来自SomeLineAnotherLine,因为字符串是不可改变的,这是否意味着SomeLine丢失,可享有GC?

非常感激

Sot*_*lis 5

当我改变s1来自SomeLineAnotherLine,因为字符串是不可改变的,这是否意味着SomeLine丢失,可享有GC?

String不可变的事实与您的问题无关.您重新分配变量并因此丢失其他参考的事实决定了该对象是否是GC的候选者.

要回答这个问题,那就是它不是String文字的.

此外,字符串文字始终引用类String的相同实例.这是因为字符串文字 - 或者更常见的是作为常量表达式(第15.28节)的值的字符串 - 被"实现"以便使用该方法共享唯一实例String.intern.

String对象不会被垃圾收集,因为该对象ClassLoader具有对它的引用.

相关阅读: