字面值字符串保存在常量池当中,以String对象形式,String和StringBuffer和StringBulider的区别是String类的value数组是final类型,而StringBuffer和StringBulider的value不是final类型。所以String不能更改字符串的值,这里仅仅指改变数组大小,生成新的数组引用,String类不支持只改变数组中的值。String字符串不一定都放在常量池当中,字面值一定放在常量池当中,StringBulider和StringBuffer的字符串一定放在堆中,不在常量池中,因为调用了append函数。
String类的intern()函数表示返回该字字串常量池的引用,若常量池没有该字符串,则创建。
字符串的”+“运算:
字面值相加时,编译器进行语法优化,先将字符串字面值拼接起来,例如String a=”hello"+“world”,优化后是“String a=“helloworld”;
注意:只有在字面值相加时,才会优化,其它情况诸如变量相加或者new String得出的字符串相加都不会产生优化,得出来的数组value值是放在堆当中,数组中的值指向字面值。
StringBuffer和StringBulider相对于String来说更节省内存,String更改字符串需要额外创建一个对象和销毁一个对象。
StringBulider和StringBuffer是两倍加2扩容:
关于String和StringBuffer和StringBulider
于 2021-08-30 09:10:23 首次发布