/*
为什么说String是不可变的?
答:在源代码中String类中有一个byte[]数组,这个数组被关键字final修饰,为此该数组一旦创建其长度是不可变的,再有被final
修饰的引用一旦指向某个对象后,不能再指向其它对象,所以String是不可变的。
这里说的不可变是指字符串对象"ab"不能变成"abc",这是两个彼此独立的对象都存放在方法区的字符串常量池中
StringBuffer/StringBuilder为什么是可变的?
答:在源代码中StringBuffer/StringBuilder同String一样内部也是一个byte[]数组,但是StringBuffer/StringBuilder中的数组
没有被关键字final修饰,为此该数组的长度是可变的,并且StringBuffer/StringBuilder的默认初始化容量是16,其容量根据
字符串的实际长度会自动扩容(调用数组拷贝的方法System.arraycopy()进行扩容),所以StringBuffer/StringBuilder是可变的
它适合用于字符串的频繁拼接操作。
*/
class StringTest06{
public static void main(String[] args) {
/*
这里我们再来说说字符串不可变的意思是什么?
答:说的是双引号里面的字符串对象一旦创建是不可变的。
*/
String s = "xy"; //是说"xy"不能变成"x",也不能变成"xyz"
/*
这里的s是变量也是引用,它是可变的,它没有被final修饰,它是可以指向其它对象的,字符串不可变说的不是变量s不可变,
说的是字符串本身不可变。存放在字符串常量池中的"xy"和"abc"是不可变的
*/
s = "abc";
}
}版权声明:本文为heliuerya原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。