如果你注意旧版本substring方法的实现 你就会发觉JDK开发者想尽一切办法减少通过拷贝原本字节数组重建字符串对象的行为发生基于上一种"共享"的方式带来的问题是子字符串依赖原始字符串导致原始字符串资源不会被释放掉(比如"abc"字符串你通过substring(1)得到"bc" 可实际他依赖的还是旧的引用) 所以有的时候要强制拷贝一份"内容"创建新的字符串对象 至于string pool 如果指定对象已经存在于string pool中 可以让对象被回收的时间提前(通过直接饮用string pool中的字符串 提前释放掉对原始字符串的引用)
Java String Pool是指存储在堆内存中的字符串的集合。 在这种情况下,无论何时创建新对象,字符串池都会首先检查对象是否已存在于池中。 如果存在,则将相同的引用返回到变量,否则将在字符串池中创建新对象,并将返回相应的引用。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。