代码实现:
public class HelloWorld {
public static void main(String[] args) {
// 创建一个StringBuilder对象,用来存储字符串
StringBuilder hobby=new StringBuilder("爱慕课");
System.out.println(hobby);
System.out.println(hobby+"team");
System.out.println(hobby);
}
}
运行结果:
爱慕课
爱慕课team
爱慕课
这个和String的运行结果一样,怎么理解“不可变性”?
hobby+"team" 和 hobby = hobby+"team"不一样。前者是新的内存地址,放了这个值,后者新的值,放了值,但是。。。'hobby='又将地址指向原来的地址。和问题不是同一个问题
StringBuilder的内存不变:生成一个StringBuilder,对此数据的更改,比如拼接操作 hobby = hobby+"team",就1.所说的还是原来的地址。只是这个地址的值变了。而String做拼接操作时,会生成新的内存地址。拼接的值也是在新的内存地址上。StringBuilder的不变是指其内存地址,因此有些情况下,如果平凡调用同一个参数用来拼接,使用StringBuilder的效率比较高
指向的值不一样
当你hhh ="fasfa"; 的时候 值已经从hhhdas指向了fasfa hhhdas不变,多了一个fasfa hhhdas没人使用
但如果用StringBuffer或者StringBuilder的话会把hhdas修改成fasfa吧
string创建一个对象的值不能改变,stringBuilder创建一个对象之后可以进行修改,不会再创建另一个变量