String可以用+操作,StringBuilder可以吗

String可以用+操作,StringBuilder可以吗

String可以用+操作,StringBuilder可以吗?

这两个都是类,可以理解为String类中的方法都不会改变调用方法的对象的值,而StringBuilder的方法会改变调用对象的值,这个差异是类中方法编写不同导致的吗?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,首先StringBuilder也是可以+操作的,只是不建议哟。

注:字符串的“+”操作其本质是创建了StringBuilder对象进行append操作,然后将拼接后的StringBuilder对象用toString方法处理成String对象。

同学可参考如下代码理解:

http://img1.sycdn.imooc.com//climg/5f2cf9cb09b3f60b12770471.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


好帮手慕小脸 2020-08-07 14:30:48

同学你好,final修饰的类不能被继承,这里同学理解是正确的。很抱歉,这里老师给出截图的未截完整,现已经修改。望谅解,

首先final表示最终的,

用final修饰的变量叫常量,给定值后不能修改

用final修饰的类不能被继承

用final修饰的方法不能被重写

这里可以看到String真正存储数据的地方在与char value[]. 存储在一个数组内, 且其定义为final类型. 也就是这个引用是不可改变的。且其声明为private类型的. 在外界无法访问

http://img1.sycdn.imooc.com//climg/5f2cf456094da54307390157.jpg

简单理解,String对象其实在内部就是一个个字符然后存储在这个value数组里面的。但是value对外没有setValue的方法,所以整个String对象在外部看起来就是不可变的。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 能掐会算 #1
    谢谢老师,懂了懂了 再问一个问题,怎么理解“在使用StringBuilder时,尽量不要“+”和StringBuilder混用,否则会创建更多的StringBuilder对象”这句话呢,String和String使用+会创建更多string对象这个我可以理解,那么StringBuilder呢
    2020-08-07 14:34:09
好帮手慕小脸 2020-08-07 11:33:50

同学你好,

1、在使用StringBuilder时,尽量不要“+”和StringBuilder混用,否则会创建更多的StringBuilder对象

2、理解是可以的,String类是一个典型的不可变类,当实例对象创建后,就不能再被改变。

简单来说:String类中使用final关键字修饰字符数组来保存字符串,所以String对象是不可变的。而StringBuffer和StringBuilder都继承了AbstractStringBuilder类,在AbstractStringBuilder中没有使用final关键字修饰,所以这两种对象都是可变的

http://img1.sycdn.imooc.com//climg/5f2cf375092ae6d207150196.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 能掐会算 #1
    final修饰类不是代表不可继承嘛,这与对象是否可变有什么关系呢
    2020-08-07 11:57:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师