gpt4 book ai didi

java - 什么时候创建/销毁常量字符串?

转载 作者:搜寻专家 更新时间:2023-10-31 19:58:47 26 4
gpt4 key购买 nike

考虑以下代码

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

  2. String 对象的垃圾回收方式与任何其他对象的垃圾回收方式相同,它们本质上没有什么不同。 但是 some String are interned (最值得注意的是,这包括所有字符串文字),这可能会或可能不会阻止它们被垃圾收集(未定义且依赖于实现)。

    因此,只要您的类保持加载状态,这些字符串常量就会一直存在,不会被垃圾回收。

关于java - 什么时候创建/销毁常量字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2956701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com