为什么String类是这样设计的?

Vid*_*rma 2 java jvm jls

为什么这个String类的设计方式是这个类的实例是汇集的还是不可变的?

谢谢和问候,Vidyakar Sharma.

Jon*_*eet 6

字符串对象通常不会被合并 - 只有字符串常量通过实习自动合并.(你intern当然可以手动调用,甚至可以通过HashSet<String>等方式创建自己的池.)这只是安全的,因为字符串是不可变的 - 确保任何编译时常量只在内存中出现一次是有意义的.

您不希望为系统中的每个字符串支付在实习池中查找字符串(或永久保留它)的代价,因为随着时间的推移可能会有许多不同的字符串.但是,从类中加载的字符串常量只要这些类就会保留,并且一旦你可以减少GC流失所需的内存,就可以实现它们.