猿问

请问关于String和Stringbuilder的区别

请问关于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的作用到底应该怎么理解

hy_wang
浏览 2107回答 3
3回答

Caballarii

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回收

蒹葭苍苍白露为霜

图片里有答案
随时随地看视频慕课网APP

相关分类

Java
我要回答