5-- String 、StringBulid 、StringBuffer的区别
String是典型的Immutable(不可变)类,被声明为final class,所有属性都是final的。由于它的不可变性,类似拼接、截取字符串等操作都会产生新的String对象,往往编码中常常对字符串进行操作,所以操作的效率往往对应用性能有明显影响。
StringBuffer 是为了解决上面提到的因拼接产生太多中间对象问题而提供的一个类,我们可以用append 或者add方法,把字符串添加到已有序列末尾或者指定位置。StringBuffer本质是一个线程安全的可修改字符序列,它保证了线程安全(通过把各种修改数据的方法都加上synchronized关键字实现),也随之带来了额外的性能开销,若无线程安全的需要,可以使用StringBulider。
深入分析:
1.字符串的设计和实现考量
StringBuffer 和StringBulider底层都是利用可修改的数组(java9是byte)数组,二者都继承了AbstractStringBulider,里面包含了基本操作,区别仅仅在于方法是否加了synchronized。
这个数组构建时是初始字符串长度加16,如果没有构建时输入最初的字符串,那么初始值就是16。如果我们能预估需要的大小,最好制定其大小,避免多次扩容带来的开销,扩容需要创建新的数组,还要进行arrayCopy。
//不带字符串初始化,默认分配16byte
StringBuilder stringBuilder = new StringBuilder();
//带字符串初始化,初始化字符串长度+16byte
StringBuilder sb = new StringBuilder().append("nihao").append("ggsimida");
//指定大小50byte
StringBuilder ssb = new StringBuilder().append("nihao").append("ggsimida");
2.字符串缓存
各版本jdk的实现
3.String自身演化
java9将字符串存储方式从char数组,改变为一个byte数组加上一个标识编码的coder,极端情况下最长字符串大小变小了,但是紧凑型字符串优势巨大,更小的内存,更快的操作速度。
5-- String 、StringBulid 、StringBuffer的区别的更多相关文章
- JAVA中String与StringBuffer的区别
		
String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...
 - String 和 StringBuffer的区别
		
String与StringBuffer的区别: 简单地说,就是一个常量和变量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋 ...
 - boolean和Boolean,  char和Character , byte和Byte, short和Short,  int和Integer , long和Long , float和Float,  double和Double的区别  , String和StringBuffer的区别
		
Java提供两种不同的类型:引用类型和原始类型(内置类型).Int是java的原始数据类型,Integer是java为int提供的封装类. Java为每个原始数据类型提供了封装类. 其中原始数据类型封 ...
 - string 和 stringbuffer的区别?
		
string和stringbuffer的区别其实是变量和常亮的关系,string和stringbuffer内部实现的原理不同,在修改string对象时会产生另外的对象,也就是说在内存中会有两个存储区域 ...
 - 【转载】String和StringBuffer的区别,以及StringBuffer的常用方法介绍
		
String与StringBuffer的区别简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象.Stri ...
 - String和StringBuffer的区别
		
1.选自http://szh-java.iteye.com/blog/1666630 String 1,Stirng是对象不是基本数据类型 2,String是final类,不能被继承.是不可变对象,一 ...
 - String与StringBuffer的区别
		
首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...
 - String和StringBuffer的区别;字符串的一些基本方法
		
String 和 StringBuffer区别 字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 需要注意的是,String的 ...
 - Java语言基础(四) String和StringBuffer的区别
		
Java提供了两个字符串类:String和StringBuffer. String提供了数值不可变的字符串,而StringBuffer提供的字符串对象可以进行修改. 当知道字符数据要改变的时候就可以使 ...
 - java中String和StringBuffer的区别
		
前言 String和StringBuffer本质上都是修饰字符串的只是含义不同 StringBuffer叫做字符串缓冲区 首先看下string类的例子 public class Work1 { pub ...
 
随机推荐
- Bootstrap——导航条(navbar)
			
导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多. 导航条(navbar)中有一个背景色.而且导航条可以是纯链接(类似导航).表单以及表单和导航一起结合等多种形式. 在制作一个基 ...
 - 领扣(LeetCode)单调数列 个人题解
			
如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j,A[i]> = ...
 - postgresql , etcd , patroni 做failover
			
os: centos 7.4etcd:3.2 主从IP信息192.168.56.101 node1 master192.168.56.102 node2 slave192.168.56.103 nod ...
 - objc反汇编分析__strong和__weak
			
如题所说反汇编看__strong和__weak的真实样子,代码列举自然多,篇幅长不利于阅读,我就先搬出结论,后面是分析. 在NON-ARC环境,__strong和__weak不起作用.相反在ARC环境 ...
 - Python装饰器的使用
			
对于python编程人员,装饰器的使用肯定是必不可少的. 装饰器分为系统定义装饰器和自定义装饰器:系统定义装饰器:@classmethod:类方法装饰器 @staticmethod: 静态方法装 ...
 - 设计模式之建造者模式--PHP
			
建造者模式:将一个负责对象的构建与它的表示分离,使得同样的构建过程有不同的表示.建造者模式是一步一步创建负责的对象,它允许开发者只通过指定对象的类型和内容就可以创建它们.开发者不需要知道具体的构造细节 ...
 - 01    jQuery配置、jQuery语法结构、jQuery对象与DOM对象的互相转换
			
配置jQuery环境 下载jQuery 官网:jquery.com 学习或开发建议选择未压缩版,便于学习,发布建议选择压缩版,便于用户极速体验(点击下载若出现的是代码页 面,Ctrl+A全选复制 ...
 - 面试阿里被“吊打”,一问Spring三不知,半年后二战终拿下offer
			
Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发. 近两年来,许多大厂在面 ...
 - Zookeeper 应用实现-配置中心
			
一.目标 一个乞丐版自更新配置中心,更新配置后,能在各个服务器实现更新 二.架构 三.角色 config-web: 配置后台,主要用于管理配置,增改配置 config-agent: 监听配置,遇到变动 ...
 - PHP的常用字符串处理
			
一.拼接字符串 拼接字符串是最常用到的字符串操作之一,在PHP中支持三种方式对字符串进行拼接操作,分别是圆点.分隔符{}操作,还有圆点等号.=来进行操作,圆点等号可以把一个比较长的字符串分解为几行进行 ...