如果明天你要参加一场面试,面试官有个题目是:说说String/StringBuffer/StringBuilder它们之间的区别?你会怎么回答呢?(脑补一下答案)今天,小编就来和大家详细聊聊字符串String/StringBuffer/StringBuilder,告诉你怎样完美的回答以上面试官的问题,希望对你有帮助。

考点分析

这个题目也是考查字符串相关的。对于这个题目,我们通过阅读源码来验证我们的答案。

上图主要显示String/StringBuilder/StringBuffer的UML结构。

为什么要引入其它两种字符串处理类?

  说白了就是提高字符串连接效率。在大部分情况下,字符串的拼接速度为:StringBuilder>StringBuffer>String。

  String是不可变的,因此每次对其操作改变其变量值,其实是生成一个新的对象,然后将变量引用指向新对象;因此速度慢。

  StringBuffer则不同,对其操作即直接操作对象指向的引用,无需产生新对象,速度很快;它是线程安全的,在维护多线程的同步等也会消耗一点性能。

  StringBuilder是jdk5之后新增的,其用法与StringBuffer完全一致,但它是线程不安全的,在单线程中最佳,因为其不需要维护线程的安全,因此是最快的。

是否线程安全?

  String 字符串常量(线程安全)。StringBuffer 字符串变量(线程安全)。StringBuilder 字符串变量(非线程安全)。

  String 是不可变的,StringBuffer/StringBuilder 是可变的;String/StringBuffer是线程安全的,StringBuilder是非线程安全的。

这里引入来一个新的问题,了解String.intern()方法吗?

  String.intern()查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用。因此在用String进行字符串拼接时,会产生很多临时变量。建议多使用StringBuffer/StringBuilder。

存放在什么地方?

  String是存放在常量池,在编译期已经被确定了。new String()不是字符串常量,它有自己的地址空间,存放在堆空间。而其它两个都存放在堆空间。

最新文章

  1. C# 泛型约束
  2. 09Mybatis_入门程序——删除用户以及更新用户
  3. SourceTree工具进行提交合并代码步骤
  4. Android.mk
  5. 同一网站不同和二级域名和不同子目录的cookie
  6. 【BZOJ 2242】[SDOI2011]计算器
  7. Jquery时间验证和转换工具
  8. 使用jQuery的时候,js文件代码位置规范
  9. web组件开发入门
  10. js获取 gif 的帧数
  11. bootstrap图片轮播
  12. leetcode438
  13. 去除inline-block出现间距的几种方法
  14. sublime出现 unable download.......
  15. [BZOJ2687]交与并[决策单调性]
  16. 2016 ACM/ICPC Asia Regional Qingdao Online 1001 I Count Two Three(打表+二分搜索)
  17. 【转】Spark源码分析之-scheduler模块
  18. 找到当前mysql group replication 环境的primary结点
  19. JAVA模块以及未来(转)
  20. 开源WebGIS实施方案(三):Shapefile数据导入到PostGIS

热门文章

  1. linux虚拟机配置网络
  2. django开发之model篇-Field类型讲解
  3. 【nginx】nginx.sh nginx 安装脚本
  4. python3.7 文件操作
  5. nrf开发笔记一开发软件
  6. Django 二——models(admin、ORM),一对一、一对多、多对多操作,all、values、value_list的对比
  7. 使用百度siteapp开发网站的App-(IOS和Android版本)
  8. 大数据学习——scala集合练习
  9. python - unittest - testsuite and runner
  10. LoadRunner web_set_sockets_option()--常用函数