可变性

String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。

StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value,这两种对象都是可变的。

线程安全性

String中的对象是不可变的,也就可以理解为常量,线程安全。

AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

性能

每次对String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。

「每天一道面试题」谈String和StringBuffer、StringBuilder区别相关推荐

  1. 「每天一道面试题」String和StringBuilder、StringBuffer的区别

    Java提供了两种类型的字符串:不可变字符串和可变字符串,分别是String和StringBuffer/StringBuilder,其中String引用的字符串内容不能被改变,而StringBuffe ...

  2. 「每天一道面试题」下面的代码有问题吗?为什么?

    壹: short s1 = 1; s1 = s1 + 1; 贰: short s1 = 1; s1 += 1; 壹编译报错,因为壹中由于1是int类型,所以s1+1运算结果也是int型,需要强制转换类 ...

  3. 「每天一道面试题」如何理解方法的重载与覆盖?

    方法重载 在同一个Java 类中(包含父类),如果出现了方法名称相同,而参数列表不同的情况就叫做重载. 方法的重载的规则: (1):方法名称必须相同 (2):参数列表必须不同(个数不同,或类型不同,或 ...

  4. 「一道面试题」ArrayList和LinkedList有什么区别及使用场景

    区别 ArrayList底层是用数组实现的,可以认为ArrayList是一个可改变大小的数组.随着越来越多的元素被添加到ArrayList中,其规模是动态增加的. LinkedList底层是通过双向链 ...

  5. 「一道面试题」输入URL到渲染全面梳理中-页面渲染篇

    前置知识 此文是一道面试题,又不仅仅是一道面试题,不过这道题共分了三篇来说,嗯..可想而知 接上文,上文我们讲了网络通信的部分,详细请看「一道面试题」输入URL到渲染全面梳理上-网络通信篇, 那么该说 ...

  6. 从「八个雅鹿」谈搜索技巧

    从「八个雅鹿」谈搜索技巧 <八个雅鹿>: 众里搜狗(Sogou)上百度(Baidu),蓦然回首, 雅虎(Yahoo)却在股沟(Google)必硬(Bing)处. 百度,百度,精起八个雅鹿( ...

  7. 浅谈String和StringBuffer类:

    浅谈String和StringBuffer类: 如果有错误的地方,请多多提出! 内存分配: String(固定字符串): String类对象一旦创建,内容无法修改. String a="3& ...

  8. String与StringBuffer的区别

    String与StringBuffer的区别 简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象. St ...

  9. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

最新文章

  1. 039_Unicode对照表五
  2. java的websocket_java 实现websocket的两种方式实例详解
  3. [内核编程] 内核环境及其特殊性,驱动编程基础篇
  4. C/C++文件剪切复制删除
  5. WBOLT 搜索推送管理插件(原百度推送管理插件) 3.4.11 Pro
  6. 一个简易的数字输入框组件
  7. 汇编edx_开源社区开始热议edX
  8. 代码动态改变 NGUI UILabel 的字体
  9. 关于单片机大循环结构编程
  10. 小菜鸟一步步打造图书馆外挂之十六:手动启动入口的实现
  11. php 数字转换为货币,php中数字转换成货币格式实现代码
  12. 2022年中国工业机器人市场现状研究分析与发展前景预测报告
  13. 360无线网卡驱动服务器,360无线网卡驱动
  14. 计算机如何通过手机连接网络打印机,手机连接电脑打印机怎么设置
  15. 深度学习笔试、面试题 二
  16. SAP_ABAP 采购价格条件报表(改进版1)
  17. cocos2dx面试题整理
  18. LeetCode Task04 数组数组二分查找 0704二分查找 0069Sqrt(x)
  19. 小米手机显示无法连接服务器错误代码,来电转接出现连接问题或MMI码无效的解决方法...
  20. 个性化Ubuntu壁纸如何添加

热门文章

  1. mat查找多线程并发下大对象导致的堆内存问题
  2. es的node内存设置
  3. 多线程(一):初识多线程
  4. 要让人人能AI的百度EasyDL,现在怎么样了?
  5. 解密亚马逊Ironman计划:背靠AWS云服务发力AI,对抗谷歌微软
  6. USB-IF 再度为 USB 3 改名,这次更难辨别了
  7. Zmail-简单易用的python邮件模块
  8. android openGL ES2 一切从绘制纹理開始
  9. 北上广深的请注意,阿里聚安全来找你玩啦~
  10. Angular Material 教程之布局篇 (五) : 布局参数