String 对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。表面上我们可以给字符串变量任意赋新值、
添加字符等一系列的操作,但实际上并没有修改已存在的字符串对象的值,而是字符串变量(引用型)指向了新的字符串对象,此时新的
字符串对象的值就是修改后的值。字符串的拼接,转换大小写等于此情况类似。
实例如下:
运行如下:
为什么第一次和第二次输出的是一样的了,就是因为myStr1在改变后创建了新的对象,原来的字符串对象的值并没有改变,所以myStr1的值并没有改变。
String 对象是不可改变的。每次使用 String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。而 StringBuilder 则不会。
示例如下:
运行如下:
由以上可以看出:两者的主要的区别在于 StringBuilder相对于String,效率要高些,String会在每次改变的时候进行内存重新组合,而StringBuilder则不会从新组合。如果创建的是一个文本密集的应用程序或者需要对字符串执行重复修改的话,最好选择StringBuilder类。