String:

给String赋值,会在常量池中查找是否有相同的字符串常量,如果有则返回栈中的引用,如果没有则创建常量返回引用.

new String()除了在栈和常量池中创建对象之外,同时会在堆中创建对象.

StringBuffer:

线程安全的String,jdk1.0之后出现,初始容量为16个字符,源码如下

StringBuffer 不会像String一样改变字符串就会重新生成一个对象,而是以连接的方式直接拼接字符串.

append(String str)为StringBuffer提供的线程安全的字符串追加方法,由源码可知追加通过synchronized实现线程安全,关于如何实现线程安全的底层原理,会在之后的juc专栏中详细剖析.

setChat(int index,char ch) 可以做字符替换操作,同样线程安全.

当然,synchronized实现线程安全的同时大大降低了字符串操作的效率.

StringBuilder:

非线程安全的的字符串对象,同样提供append()方法的各种操作重载,拼接替换删除某个字符的操作,在没有线程安全问题的前提下,此种操作效率最高.

总结:

1.String创建字符串效率较低,适合少量字符串操作的场景

2.StringBuffer使用synchronized关键字保证操作安全性,但同时损失了性能,适合安全性较高的场景使用.

3.StringBuilder线程不安全,操作高效,适合安全性要求较低但又需要很高的操作效率的场景使用.

关注我的公众号 :  宇哥996(id: java_zyh)   Java全栈技术,大厂面试题不定期分享

最新文章

  1. ASP.NET MVC系列:Model
  2. 周末娱乐一下--------恶搞windows小脚本
  3. FUNCTION
  4. Spring中Aware相关接口原理
  5. 软件开发过程中的审查 (Review)
  6. bash: sqlplus: command not found 解决方法
  7. 你好,C++(24)好大一个箱子!5.1.1 函数的声明和定义
  8. Tomcat地址栏传中文参数乱码问题处理
  9. Android Studio .grade文件知识
  10. Objective-C类的使用
  11. Java整理
  12. Clairewd’s message ekmp
  13. C++ MFC棋牌类小游戏day4
  14. Centos或Windows中部署Zookeeper集群及其简单用法
  15. Linux开机自启配置
  16. Perl关联数组用法集锦
  17. ubuntu16.04 编译安卓4.2
  18. Django之form组件is_valid校验机制
  19. Swagger使用总结(十九)
  20. Bind搭建DNS服务

热门文章

  1. 第8章 Python类中常用的特殊变量和方法目录
  2. Python模块学习遇到的问题
  3. PyQt(Python+Qt)学习随笔:QTreeWidgetItem项下的子项列表中增加子项的方法
  4. 第八章、Designer组件属性编辑界面中QWidget类相关属性详解
  5. 谈谈传说中的redo log是什么?有啥用?
  6. HTTP慢速拒绝服务攻击(Slow HTTP Dos)
  7. Python接口测试-使用requests模块发送GET请求
  8. CSS基础-边框
  9. 关于微信NFC功能开发的链接总结
  10. Android原子操作——android_atomic_cmpxchg