String、StringBuilder、StringBuffer的区别

链接:https://www.nowcoder.com/questionTerminal/0f0a11f9a158469a9a8bf25bba2ae296
来源:牛客网

java中,StringBuilder和StringBuffer的区别,下面说法错误的是?C

  • A: StringBuffer是线程安全的
  • B: StringBuilder是非线程安全的
  • C: StringBuffer对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。
  • D: 效率比较String<StringBuffer<StringBuilder,但是在 String S1 = “This is only a” + “ simple” + “ test”时,String效率最高。
  • 解答:

    StringBuffer在多线程下操作大量数据。

    StringBuilder在单线程下操作大量数据。

    对String的修改其实是new了一个StringBuilder并调用append方法,然后调用toString返回一个新的String。

    StringBuffer是在StringBuilder基础上加锁,加锁是一个重量级的操作,需要调用操作系统内核来实现,比较耗时。

    因此效率明显有:String<StringBuffer<StringBuilder;

    但是这个并不是绝对的,因为JVM会对String进行优化,譬如 String str = "i"+"love"+"java";

    其中的字符串在编译时就能确认,编译器会直接将其拼接成一个字符串放在常量池:"i love java";

    但是若是String a = "i";    String b = "love";    String c = "java";    String str = a+b+c;

    只有运行时才能确认str最终是什么,编译器并不会进行优化,是通过StringBuilder实现的。


  • 效率:StringString(生于JDK1.0时代) 不可变字符序列     < StringBuffer(生于JDK1.0时代)  线程安全可变字符序列    < StringBuilder(生于JDK1.5时代) 非线程安全可变字符序列   。Java中的String是一个类,而并非基本数据类型。string是值传入,不是引用传入。 StringBuffer和StringBuilder可以算是双胞胎了,这两者的方法没有很大区别。但在线程安全性方面,StringBuffer允许多线程进行字符操作。 这是因为在源代码中StringBuffer的很多方法都被关键字 synchronized  修饰了,而StringBuilder没有。 StringBuilder的效率比StringBuffer稍高,如果不考虑线程安全,StringBuilder应该是首选。另外,JVM运行程序主要的时间耗费是在创建对象和回收对象上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值