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

请问关于String和Stringbuilder的区别

请问关于String和Stringbuilder的区别

hy_wang 2017-07-28 15:26:12
请问关于String和Stringbuilder的区别既然说StringBuilder是一个类 那为什么不能直接进行赋值StringBuilder one=“慕课网”;请问这个为什么错了,应该如何使用sringBuilder这个我的理解是 当String one=“慕课网”; String two=new String("慕课网");//这里是利用String新建了一个对象存储在堆中,占用了内存空间。虽然说one和 two内容相同,但是内存不同。在常量池中拥有了一个内存"爱慕课"他不是对常量池的一个修改,只能在堆中重新 创建一个"爱慕课"。占用了空间,影响了运行速度 StringBulider three=new StringBulider("慕课网")//这里是创建了一个新的StringBulider对象为“慕课网”,但是 这里的"慕课网" 如果之后使用 StringBuilder four=new StringBuilder(“123”); four=three; 也就是说对于four这个变量是在three的基础上(或者说她的内存空间) 进行了修改。直白说就是"慕课网"内存中的改变为"123"请问大牛我的理解正确吗,如果不对请指正。如何正确那么请问。以及为什么我在输出system.out.print(one==three);的时候提示不兼容,那么来说StringBulider的作用到底应该怎么理解
查看完整描述

3 回答

?
Caballarii

TA贡献1123条经验 获得超629个赞

class StringBuilder{
    String s;
    
    StringBuilder(String s){
        this.s=s;
    }
    
    ......
}

看成这样一个类大概就可以了。实际成员变量应该是char[]

双引号形式的字符串就是String类型的,类之间如果不存在父子关系,是不可以强制转换的,所以

StringBuilder one=“慕课网”;

把String类型赋值给StringBuilder类型就会报错,后面用“==”比较不仅错误而且没意义,对象用==是比较地址的,不是比较内容的。

four=three;
也就是说对于four这个变量是在three的基础上(或者说她的内存空间)
进行了修改。直白说就是"慕课网"内存中的改变为"123"

这句话不对,four=three只是把three的地址传给了four,four修改了three也会跟着变,而"慕课网"这个字符串如果没有变量指向就会被GC回收

查看完整回答
1 反对 回复 2017-07-28
?
蒹葭苍苍白露为霜

TA贡献14条经验 获得超13个赞

597afcc10001cea010801029.jpg
图片里有答案

查看完整回答
反对 回复 2017-07-28
  • 3 回答
  • 1 关注
  • 2106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信