StringBuffer和StringBuilder之间的主要区别是什么?在决定其中任何一项时是否存在性能问题?
当前回答
字符串缓冲区
StringBuffer是可变的,这意味着可以更改对象的值。通过StringBuffer创建的对象存储在堆中。StringBuffer具有与StringBuilder相同的方法,但StringBuffer中的每个方法都是同步的,即StringBuffer是线程安全的。
因此,它不允许两个线程同时访问同一个方法。每个方法一次只能由一个线程访问。
但线程安全也有缺点,因为StringBuffer的性能由于线程安全属性而受到影响。因此,当调用每个类的相同方法时,StringBuilder比StringBuffer更快。
StringBuffer值可以更改,这意味着可以将其分配给新值。如今,这是一个最常见的面试问题,即上述课程之间的差异。字符串缓冲区可以通过使用toString()方法。
StringBuffer demo1 = new StringBuffer(“Hello”) ;
// The above object stored in heap and its value can be changed .
demo1=new StringBuffer(“Bye”);
// Above statement is right as it modifies the value which is allowed in the StringBuffer
字符串拼接
StringBuilder与StringBuffer相同,即它将对象存储在堆中,也可以对其进行修改。StringBuffer和StringBuilder之间的主要区别是StringBuilder也不是线程安全的。StringBuilder速度快,因为它不是线程安全的。
StringBuilder demo2= new StringBuilder(“Hello”);
// The above object too is stored in the heap and its value can be modified
demo2=new StringBuilder(“Bye”);
// Above statement is right as it modifies the value which is allowed in the StringBuilder
资源:字符串Vs StringBuffer Vs StringBuilder
其他回答
字符串是不可变的。
StringBuffer是一个可变的和同步的。
StringBuilder也是可变的,但不同步。
由于StringBuffer是同步的,因此需要额外的工作,因此基于性能,它比StringBuilder慢一点。
StringBuilder不是线程安全的。字符串缓冲区是。更多信息请点击此处。
编辑:至于性能,在热点启动后,StringBuilder是赢家。然而,对于较小的迭代,性能差异可以忽略不计。
StringBuilder比StringBuffer更快,因为StringBuffer是同步的,StringBuffer有自己的char[]缓冲区用于缓存,就像BufferedInputStream一样。
StringBuffer速度较慢的另一个原因是,每次添加或删除时,它都会更新变量缓冲区。我测试了它,如果我移除超过一万次,StringBuffer的移除方法会更快。
StringBuffer已同步,StringBuilder未同步。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap