为什么String
类的设计方式是这个类的实例是汇集的还是不可变的?
谢谢&问候, Vidyakar Sharma。
答案 0 :(得分:6)
字符串对象通常不是 - 只有字符串常量通过实习自动合并。 (当然,您可以手动调用intern
,甚至可以通过HashSet<String>
等创建自己的池。)这只是安全的,因为字符串是不可变的 - 并且它是有意义的确保任何编译时常量只在内存中出现一次。
您不希望为系统中的每个字符串支付在实习池中查找字符串(或永久保留它)的价格,因为可能有许多不同的字符串时间。但是,从类中加载的字符串常量只要这些类就会存在,并且通过实例一次,可以减少GC流失所需的内存。
答案 1 :(得分:3)
如果String不是不可变的,你将无法
简而言之,生活会变得复杂得多,因为你必须在任何地方制作字符串的防御性副本,而StackOverflow会充斥着关于某些字符串存储在地图中却无法找到的细微错误的问题了。
答案 2 :(得分:2)
An Immutable object是存在的最佳设计决策之一。它旨在简化并发编程。共享对象的线程不会相互干扰。
如果您想要可变字符串,请查看:StringBuffer和StringBuilder
答案 3 :(得分:1)
for mutable strings check out:来自java.lang的StringBuffer和StringBuilder。
答案 4 :(得分:0)
汇集以避免出现代表相同的重复对象。
可以更容易分享。