String、StringBuffer、StringBuilder有什么区别呢?

1、String:

  1. 首先String是不可变的这是家喻户晓的,它的底层是用一个final修饰的char数组来保存数据的
  2. String a = "123",String b = "123", b == a 是会返回true的,这里牵扯到了字符串常量池,因为很多字符串都是常见的,不可能每个字符串都创建一个对象吧?你有一个“abc”字符串,他也有一个,有10000个“abc”字符串就要创建10000个“abc”字符串?这样对性能和内存肯定有损耗,所以JVM中就会有一个字符串常量池(Java6中被缓存的字符串是存在所谓 PermGen 里的,也就是臭名昭著的的“永久代”,这个空间是有限的,也基本不会被FullGC之外的垃圾收集照顾到。所以使用不当,OOM就会光顾。在后续版本中,这个缓存被放置在堆中,这样就极大避免了永久代占满的问题,甚至永久代在JDK8中被MetaSpace(元数据区)替代了。而且默认缓存大小也在不断扩大中,从最初的1009,到7u40以后被修改为60013。)来保存字符串常量,以上定义的变量a,和b之所以用"=="相比较返回true是因为他们都指向同一个字符串对象。
  3. 当然以上情况要注意的是:String  a = new String("123”) ,String  b = new String("123”)这样的写法,a == b返回的就是false了。
  4. 计算中注意的两点,String a = "123" + "123 + "2341";这种写法,在编译期就已经确定了字符串“1231232341”,所以速度还是很快的。但是如果用下面这种字符串拼接方式,那么就会导致性能大减,这也是String拼接字符串效率最低的原因之一了吧。String a = "123",a  += "23"; a += "cb";这种情况下,String底层会实例化一个一个有一个的StringBuilder对象并且利用append方法来拼接字符串。当字符串拼接量比较大的时候,可想而知创建那么多StringBuilder对象造成的性能开销和内存开销了。

2、StringBuilder

  1. StringBuilder是非线程安全的,少了同步造成的性能开销,所以在大部分场景中,StringBuilder仍然是拼接字符串的首选。

3、StringBuffer

  1. StringBuffer与StringBuilder是大致相同的,都有相同的方法相同的属性,相同的特性等。不同的是加了synchronized关键字到所有操作字符串的方法上(append等),保证了操作字符串的线程安全。
  2. StringBuffer与StringBuilder底层都是用一个char[] value来保存数据的,而在append时候仅仅是对这个数组进行扩容,所以在性能上相比反复创建StringBuilder对象的String来说,性能提升了很多。

最新文章

  1. eclipse 搭建python环境
  2. Struts2 Result 类型和对应的用法详解
  3. 【问题解决】线程间操作无效:从不是创建控件“textBox1”的线程访问它
  4. Gtk中的文本视图(GtkTexViewWidget)
  5. 23种设计模式全解析 (java版本)
  6. mevan引入容联云通讯jar
  7. MVC中使用AuthorizeAttribute做身份验证操作【转】
  8. 基于MFC简单图片裁剪工具
  9. Linux编程之给你的程序开后门
  10. Android 加载gif图片强大框架(支持预加载、缓存,还支持显示静态图片,一行代码全搞定)
  11. XIX Open Cup named after E.V. Pankratiev. GP of Poland(AMPPZ-2018)
  12. Centos 7 下监控与告警部署
  13. 转:Loadrunner添加服务器监控
  14. delphi传递变量给fastreport
  15. 常用笔记:Web前端
  16. MySql NDB cluster replication配置
  17. sex在软件开发中的运用--SIX技术
  18. java过滤特殊字符的正则表达式
  19. 【xsy1172】 染色 dp
  20. bootstrap之按钮和图片

热门文章

  1. python 中对象is和==是怎么比较的
  2. mac安装mysql数据库及配置环境变量
  3. 安装vue模板时,选择webpack-simple还是Webpack?
  4. 使用python获取微医数据
  5. OOM异常的发生原因
  6. Qt编写数据可视化大屏界面电子看板9-曲线效果
  7. String字符串的截取
  8. 免费好用的 Apple 工具(Windows 适用)
  9. linux ssh利用公钥免密登陆
  10. 【Qt开发】Qt5 中对 C++11 一些新特性的封装