StringBuffer和StringBuilder
时间:2020-11-21
本文章向大家介绍StringBuffer和StringBuilder,主要包括StringBuffer和StringBuilder使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
StringBuffer和StringBuilder
StringBuffer
- String类型的字符串,一旦new出来后不可变
/*这一行代码对创建了三个String对象:"abc","bc","abcbc"
故如果频繁进行字符串拼接,会造成方法区里的字符串常量池里无用对象过多,造成浪费
推荐使用StringBuffer或StringBulider
*/
String s1 = "abc"+"bc";
- 在Java9之前 String,StringBuffer和StringBuilder的底层结构是char[]数组, 在这种方式下,每一个字符都将占用两个字节的空间。
- 在Java9之后 String,StringBuffer和StringBuilder的底层结构是byte[]数组
- coder的用法:
- 当检测到变量按照latin1或ISO进行标识时,会为其分配一个字节大小的空间;
- 当检测到变量按照utf-16进行标识时,会为其分配而两个字节大小的空间。
为什么同样底层是char[]数组,String不可变,StringBuffer可变
- 因为String的底层数组char[]使用final修饰的,new出来后就只能指向这个数组的地址,而char[]数组一旦new出来后,长度不能变
- StringBuffer的底层数组char[16],初始化长度16,没有用final修饰; 当长度不够时,会进行扩容,创建一个长度更大的的char[]数组,这时StringBuffer转而指向这个数组的地址,而之前的对象会被gc回收.
怎么优化StringBuffer的性能
- 在创建StringBuffer时,最好给一个初始化容量
- 尽量减少StringBuffer的扩容次数
- 关键点: 给一个合适的的初始化容量
StringBuffer和StringBuilder的区别
- StringBuffer的方法都有用synchronized修饰,是线程安全的,速度较慢
- StringBuilder的方法都没有用synchronized修饰,是线程不安全的,速度较慢
原文地址:https://www.cnblogs.com/jqccan/p/14017655.html
- 今天的面试小记
- objective-C中的序列化(serialize)与反序列化(deserialize)
- 微信小程序 template 模板功能实现循环
- ASP.NET Web API 接口执行时间监控
- 这么多前端优化点你都记得住吗?
- 愚蠢的”记住“密码方式终于还是出了问题
- C#获取本机可用端口
- 想知道你的对象用微信和谁聊得最多吗?一个代码告诉你
- objective-C中的接口与泛型
- 段永朝:天性,互联网的灵性回归
- objective-C中的Class(类类型),Selector(选择器SEL),函数指针(IMP)
- 数据中心进水了怎么办?数据中心如何防洪?
- 戴若犁:虚拟中的现实
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【LeetCode】重建二叉树day04
- 【LeetCode】从尾到头反过来返回每个节点的值(用数组返回)day03
- mybatis文件映射之利用association进行关联查询(二)
- 【JUC】CountDownLatch你真的了解吗?
- mybatis动态sql之foreach补充(一)
- 【LeetCode】把字符串 s 中的每个空格替换成““%20””day02
- bert加载数据代码
- python爬虫--看看虎牙女主播中谁颜值最高
- 基于maven+ssm的增删改查之maven环境的搭建
- (22)Bash环境变量
- maven之在eclipse中创建maven项目
- wiki百科之将词转换为索引表示
- 【LeetCode】找出数组中重复的数字day01
- pytorch实现的transformer代码分析
- 终于搞懂HashMap的源码了!!!