字符串内容不可变
字符串常量池指的是当定义一个字符串会将该字符串的对象放入字符串常量池,当再次定义的字符串的内容与之前定义的内容相同时,则不需要再开辟新的堆内存空间,直接将引用指向常量池里面的对象即可
如果字符串内容可变的话,这样的字符串常量池的设计显然就没有意义了,还带来了很多安全隐患
字符串可变的隐患和设置不可变原因详解
//字符串内容不可变内存分析
public class StringChage{
public static void main(String[]args){
String massage="www.";
massage=massage+"yoock";
massage=massage+".com";
System.out.println(massage);
}
}
运行结果:
此过程内存结构分析:
可以发现String对象内容的改变实际上时通过内存地址的“断开-连接”变化完成的 ,而本身字符串中的内容并没有发生任何变化
此过程的问题
在今后的开发中需要牢记字符串内容不可变这一重要特性,如果需要大量修改字符串的内容,必将会大量进行内存的“断开-链接”操作,这样做必将会产生大量的垃圾空间,这也必将会极大的影响程序的性能,如果真的需要修改可以是因StringBuffer来来完成