「每天一道面试题」谈String和StringBuffer、StringBuilder区别
可变性
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区别相关推荐
- 「每天一道面试题」String和StringBuilder、StringBuffer的区别
Java提供了两种类型的字符串:不可变字符串和可变字符串,分别是String和StringBuffer/StringBuilder,其中String引用的字符串内容不能被改变,而StringBuffe ...
- 「每天一道面试题」下面的代码有问题吗?为什么?
壹: short s1 = 1; s1 = s1 + 1; 贰: short s1 = 1; s1 += 1; 壹编译报错,因为壹中由于1是int类型,所以s1+1运算结果也是int型,需要强制转换类 ...
- 「每天一道面试题」如何理解方法的重载与覆盖?
方法重载 在同一个Java 类中(包含父类),如果出现了方法名称相同,而参数列表不同的情况就叫做重载. 方法的重载的规则: (1):方法名称必须相同 (2):参数列表必须不同(个数不同,或类型不同,或 ...
- 「一道面试题」ArrayList和LinkedList有什么区别及使用场景
区别 ArrayList底层是用数组实现的,可以认为ArrayList是一个可改变大小的数组.随着越来越多的元素被添加到ArrayList中,其规模是动态增加的. LinkedList底层是通过双向链 ...
- 「一道面试题」输入URL到渲染全面梳理中-页面渲染篇
前置知识 此文是一道面试题,又不仅仅是一道面试题,不过这道题共分了三篇来说,嗯..可想而知 接上文,上文我们讲了网络通信的部分,详细请看「一道面试题」输入URL到渲染全面梳理上-网络通信篇, 那么该说 ...
- 从「八个雅鹿」谈搜索技巧
从「八个雅鹿」谈搜索技巧 <八个雅鹿>: 众里搜狗(Sogou)上百度(Baidu),蓦然回首, 雅虎(Yahoo)却在股沟(Google)必硬(Bing)处. 百度,百度,精起八个雅鹿( ...
- 浅谈String和StringBuffer类:
浅谈String和StringBuffer类: 如果有错误的地方,请多多提出! 内存分配: String(固定字符串): String类对象一旦创建,内容无法修改. String a="3& ...
- String与StringBuffer的区别
String与StringBuffer的区别 简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象. St ...
- JAVA中String与StringBuffer的区别
String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...
最新文章
- 039_Unicode对照表五
- java的websocket_java 实现websocket的两种方式实例详解
- [内核编程] 内核环境及其特殊性,驱动编程基础篇
- C/C++文件剪切复制删除
- WBOLT 搜索推送管理插件(原百度推送管理插件) 3.4.11 Pro
- 一个简易的数字输入框组件
- 汇编edx_开源社区开始热议edX
- 代码动态改变 NGUI UILabel 的字体
- 关于单片机大循环结构编程
- 小菜鸟一步步打造图书馆外挂之十六:手动启动入口的实现
- php 数字转换为货币,php中数字转换成货币格式实现代码
- 2022年中国工业机器人市场现状研究分析与发展前景预测报告
- 360无线网卡驱动服务器,360无线网卡驱动
- 计算机如何通过手机连接网络打印机,手机连接电脑打印机怎么设置
- 深度学习笔试、面试题 二
- SAP_ABAP 采购价格条件报表(改进版1)
- cocos2dx面试题整理
- LeetCode Task04 数组数组二分查找 0704二分查找 0069Sqrt(x)
- 小米手机显示无法连接服务器错误代码,来电转接出现连接问题或MMI码无效的解决方法...
- 个性化Ubuntu壁纸如何添加