为什么String
类的设计方式是该类的实例被池化并且不可变?
谢谢和问候, 维迪亚卡·夏尔马。
最佳答案
字符串对象通常不会被池化 - 只有字符串常量会通过实习自动池化。 (当然,您可以手动调用intern
,甚至可以通过HashSet<String>
等创建您自己的池。)这只是安全的因为字符串是不可变的 - 确保任何编译都是有意义的-时间常数在内存中只出现一次。
您不想为系统中的每个字符串在实习池中查找字符串(或永远保留它)付出代价,因为可能有许多不同的字符串时间。然而,只要这些类存在,从类加载的字符串常量就会一直存在,并且通过将它们驻留一次,您可以减少 GC 流失所需的内存。
关于java - 为什么String类要这样设计呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7418450/