为了账号安全,请及时绑定邮箱和手机立即绑定

String和StringBuilder的区别

代码实现:

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的运行结果一样,怎么理解“不可变性”?


正在回答

3 回答

  1. hobby+"team" 和 hobby = hobby+"team"不一样。前者是新的内存地址,放了这个值,后者新的值,放了值,但是。。。'hobby='又将地址指向原来的地址。和问题不是同一个问题

  2. StringBuilder的内存不变:生成一个StringBuilder,对此数据的更改,比如拼接操作 hobby = hobby+"team",就1.所说的还是原来的地址。只是这个地址的值变了。而String做拼接操作时,会生成新的内存地址。拼接的值也是在新的内存地址上。StringBuilder的不变是指其内存地址,因此有些情况下,如果平凡调用同一个参数用来拼接,使用StringBuilder的效率比较高

0 回复 有任何疑惑可以回复我~
#1

qq_Takeiteasy_2

HelloWorld.java:8: error: incompatible types: String cannot be converted to StringBuilder hobby = hobby+"team";
2018-12-24 回复 有任何疑惑可以回复我~

指向的值不一样

当你hhh ="fasfa"; 的时候  值已经从hhhdas指向了fasfa   hhhdas不变,多了一个fasfa  hhhdas没人使用

但如果用StringBuffer或者StringBuilder的话会把hhdas修改成fasfa吧

0 回复 有任何疑惑可以回复我~

string创建一个对象的值不能改变,stringBuilder创建一个对象之后可以进行修改,不会再创建另一个变量

0 回复 有任何疑惑可以回复我~
#1

守林鸟

String hhh="hhhdas"; hhh="fasfa"; System.out.println(hhh); 这样得代码输出是fasfa,所以你的回答有很大问题!
2018-05-15 回复 有任何疑惑可以回复我~
#2

Fz_3 回复 守林鸟

看前面的课,这里String已经创建一个新的对象。
2018-07-14 回复 有任何疑惑可以回复我~
#3

司马梵音 回复 守林鸟

是你理解的问题。hhh="fasfa";后,生成了新的内存地址,打印的内容新的内存地址,当然不一样。但是原来的String hhh="hhhdas";在内存中时不变的。
2018-08-22 回复 有任何疑惑可以回复我~
#4

司马梵音 回复 守林鸟

stringBuilder创建后的修改,实在原来的地方修改。不会生成新的内存地址
2018-08-22 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消

String和StringBuilder的区别

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信