gpt4 book ai didi

java - 字符串池是否接受局部变量?

转载 作者:行者123 更新时间:2023-12-01 07:16:04 24 4
gpt4 key购买 nike

我相信字符串池在其方法完成后放弃了本地字符串

然而:

public class TestPool implements Runnable{

/**
* @param args the command line arguments
*/
public void run() {
String str= "hello";
synchronized(str){

try {
System.out.print(Thread.currentThread().getName());
Thread.sleep(500);
System.out.print(Thread.currentThread().getName());
}

catch(InterruptedException e){

}

}
}
public static void main(String []args){
new Thread(new TestPool(),"A").start();
new Thread(new TestPool(),"B").start();
}
}

根据whizlabs的指南,此代码基于本地字符串正确同步其线程。输出始终为 AABB 或 BBAA。为什么?为什么 str String 的生命周期比其本地声明的生命周期长?

最佳答案

因为 str 的两个本地声明都指向同一个内部字符串文字“hello”。驻留字符串是常量并维护在池中。它们没有典型的生命周期,因此当不再有引用时不会被垃圾收集。

如果声明是这样的话,情况就不会是这样

String str = new String("hello");

关于java - 字符串池是否接受局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1901723/

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