技术问答-5 String StringBuilder StringBuffer

版权声明:本文为博主原创文章,未经博主允许不得转载,如需转载请在明显处标明出处! https://blog.csdn.net/qq_36291682/article/details/86672727

String
内容不可变的字符串,也就是说一个字符串如果new出来 内容就不可变了 ,因为String 底层使用了不可变字符数组(final修饰)
在这里插入图片描述
例子:String str = new Stirng(“xxx”); str的内容就是xxx是不能变的 ,可能会有人说str = “yyy”; 这不是变了吗?
错了! xxx还是那个xxx 只是新new了一个yyy而已 而str指向了yyy xxx已经没人要了 好可怜~
StringBuilder StringBuffer
- StringBuilder StringBuffer内容是可变的,底层使用可变数组
在这里插入图片描述
- append方法 修改内容 append会判断容量是否够 不够的话会重新开辟空间
-在这里插入图片描述

  • String拼接字符串需要创建很多中间对象 而StringBuilder StringBuffer 不需要创建,
  • 当然JDK1.5开始 字符串”+”拼接 编译的时候实际上是创建了一个StringBuilder 进行append最后toString() 返回一个字符串对象
  • 循环内每次使用”+”都会创建一个StringBuilder 效率还是低的 所以我们拼接字符串的时候尽量用StringBuilder StringBuffer
  • 摘抄
    1)字符串拼接从jdk5开始就已经完成了优化,并且没有进行新的优化。
    2)循环内String+常量的话会每次new一个StringBuilder,再调用append方法。
    3)循环外字符串拼接可以直接使用String的+操作,没有必要通过StringBuilder进行append.
    4)有循环体的话,好的做法是在循环外声明StringBuilder对象,在循环内进行手动append。 不论循环多少层都只有一个StringBuilder对象。
    StringBuilder StringBuffer 区别
    • StringBuilder 线程不安全的 效率高
    • StringBuffer 线程安全 效率低 (加锁 synchronized)
      在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36291682/article/details/86672727