有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java何时创建/销毁常量字符串?

考虑下面的代码

public static void method(String[] srgs){  
try{  

}catch(){  
System.out.println("Hello World" + "one");}  
catch(..){  
System.out.println("Hello World" + "two");}
catch(..){  
System.out.println(getString());}
}
  1. 这些字符串是什么时候创建的?我假设字符串将在运行时发生异常时创建。字符串在运行时创建并显示。我的一位同事告诉我,由于这些字符串是常量字符串,因此在类加载时,它们将被创建。对吗

  2. 字符串何时被垃圾回收?它们是垃圾吗?假设同一个方法在程序生命周期中可能被多次调用,那么仅仅缓存它们就没有意义了吗


共 (1) 个答案

  1. # 1 楼答案

    1. 这些字符串实际上是常量字符串,将位于类的常量池中,因此在加载类时将在JVM中实例化。它们是用+创建的这一事实并不重要,因为整个字符串仍然是一个常量表达式(即,它将与您编写"Hello Worldone""Hello Worldtwo"时完全相同)。这些规则在JLS的§ 3.10.5 String Literals中描述

    2. String对象被垃圾收集的方式与任何其他对象被垃圾收集的方式相同,它们本身没有什么不同然而,some String are interned(最明显的是,这包括所有字符串文本),这可能会或可能不会阻止它们被垃圾收集(这没有定义,并且依赖于实现)

      因此,只要类保持加载状态,这些字符串常量就会保持存在,并且不会被垃圾收集