字符串为了解决存储内存做了那些优化
-
字符串不可以变:定义的字符串存放在常量池中,下次定义相同的字符串时就直接调用原先的那个字符串的地址,减少了内存的消耗
-
使用
StringBuffer和StringBuilder
不可变的性质,如果按照字符串原先的不可变性质,如果对字符串进行拼接就会造成内存的大量消耗,此时使用StringBuffer和StringBuilder
动态的对字符串进行拼接就解决了内存消耗的问题 -
字符串连接优化:在使用+好连接字符串时,对连接进行了优化,将其转为
StringBuffer或StringBuilder
进行连接,以此来解决新字符串耗费内存的问题 -
JDK
在9之后在底层存储字符串的实现上将char[]数组实现转为了byte实现,减少了内存的消耗 -
intern
:在java
中相同内容的字符串会被放入字符串常量池中,以节省内存,但通过new String()创建的字符串不会进入字符串常量池,intern
方法可以将字符串添加到字符串常量池中,实现字符串的共享 -
由于intern()可以避免创建多个相同的字符串实例,从而节省内存
-
字符串比较问题
- 使用比较两个字符串是否相等时,如果他们指向同一个常量池中的字符串对象,则结果为true,但通过new创建的,则结果为false,intern()方法可以将字符串放入字符串常量池中,使得比较的结果为true