看到这一节后想到了StringBuilder,不用StringBuilder,使用new是不是多此一举啊?

看到这一节后想到了StringBuilder,不用StringBuilder,使用new是不是多此一举啊?

看到这一节,发现这里的String讲的比基础课程里面的详细,但是没讲StringBuilder和它们的区别。

然后发现,用new来创建String对象,不仅在常量池中已经有一个占位,还要在堆里多占用一点空间,用new是不是多此一举?

StringBuilder似乎用起来麻烦(就是感觉会想不起来用,还要多打字),StringBuilder的具体应用场景有哪些?

正在回答 回答被采纳积分+1

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

1回答
好帮手慕小脸 2021-11-27 10:47:43

同学你好,

1、需要结合具体的情况使用,也就是说不存在多此一举这个说法哟~

2、String本身是不可改变的,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响

StringBuilder不是线程安全的,StringBuilder类每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充,这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能

3、使用StringBuilder类的场景:在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder

祝:学习愉快~



  • 提问者 宝慕林5570576 #1

    感谢解答!我就是不知道 new String()的用武之地在哪里。。。

    这一节的第一个代码实例块里面,根据s2后面的注释,可以知道即使直接在创建s3的时候写:

    String s3 = "xy"; 

    也不会在常量池中多创建xy对象吧?

    而如果用了new,就还要创建再多一个对象保存地址,不知道这样做的意义是什么。

    2021-11-27 11:17:58
  • 好帮手慕小脸 回复 提问者 宝慕林5570576 #2

    同学你好,

    1、这两种创建方式在应用上没有特别大的区别,只是内存的存储位置不同,一个存储在常量池中,一个存储在堆中,例如:

    String str="abc"这句代码是在常量池中创建abc字符串对象,变量str是对常量池中该对象的引用

    而String str=new String("abc"),通过new关键字创建的对象,会在堆内存中开辟空间;所以这句代码是指,如果常量池中没有abc这个字符串对象,会在常量池中创建,并且还会在堆内存中创建一个对象,变量str是堆中对象的引用

    所以一般情况下使用前者较多,但具体使用哪种需要结合业务需求来决定

    2、是的

    祝学习愉快~

    2021-11-27 15:32:36
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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