String、StringBuffer和StringBuilder的区别
stringbuilder
String、StringBuffer和StringBuilder的区别:
文章目录
- String
- StringBuffer
- StringBuilder
- StringBuffer是如何实现线程安全的呢?
- Java9的改进
String
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
这个是String类的解释,之前小咸儿看到这个情况,不能理解上述的解释,如下
String a = "123";
a = "456";
// 打印出来的a为456
System.out.println(a)
看到这里,小咸儿不明白了,这不是明明已经对他进行修改了吗?为什么还说他是一个不可变类呢?
经过小咸儿和小伙伴们的学习,明白String类不可变在哪里体现出来的,接下来就看一张上述a对象的内存存储空间图
可以看出来,再次给a赋值时,并不是对原来堆中实例对象进行重新赋值,而是生成一个新的实例对象,并且指向“456”这个字符串,a则指向最新生成的实例对象,之前的实例对象仍然存在,如果没有被再次引用,则会被垃圾回收。
StringBuffer
StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。
StringBuffer b = new StringBuffer("123");
b.append("456");
// b打印结果为:123456
System.out.println(b);
在看一下b对象的内存空间图:
所以说StringBuffer对象是一个字符序列可变的字符串,它没有重新生成一个对象,而且在原来的对象中可以连接新的字符串。
StringBuilder
StringBuilder类也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。
StringBuffer是如何实现线程安全的呢?
StringBuffer类中实现的方法:
StringBuilder类中实现的方法:
由此可见,StringBuffer类中的方法都添加了synchronized关键字,也就是给这个方法添加了一个锁,用来保证线程安全。
Java9的改进
Java9改进了字符串(包括String、StringBuffer、StringBuilder)的实现。在Java9以前字符串采用char[]数组来保存字符,因此字符串的每个字符占2字节;而Java9的字符串采用byte[]数组再加一个encoding-flag字段来保存字符,因此字符串的每个字符只占1字节。所以Java9的字符串更加节省空间,字符串的功能方法也没有受到影响。
国行switch值得入手吗 国行switch和日版港版有什么区
国行switch怎么样?值不值得买?国行switch和日版港版有什么区别?下面和小编一起来看看吧。国行Switch什么时候发售?北京时间12月4日,主
Json.stringify()的用法
1、方法的定义 JSON.stringify ( value [, replacer] [ , space] ) 参数: (1)value:必选,要转换的值(包括所有的数据类型,通常是对象或
详解Win10家庭版/专业版/企业版功能区别
Win10版本到底有哪些?Win10的各版本有什么不同、差别和区别?Win10旗舰版有木有?Win10最好的版本是哪个?我应该用哪个版本的Windows10?
教你win7专业版和旗舰版的区别是什么
相信大家一定都知道windows7分为了很多个不同的版本,例如家庭普通版、家庭高级版、专业版、旗舰版,有不少的用户们就表示分不清楚wi
高通骁龙765和骁龙765G哪款性能好 骁龙765和骁龙765G
第四届高通骁龙技术峰会可谓看点多多,除了2020年新旗舰处理器骁龙865之外,定位中端的骁龙765同样值得我们关注。骁龙765系列共有两
文章回顾
大家看了本文String、StringBuffer和StringBuilder的区别的精彩教程资源内容,是不是对String、StringBuffer和StringBuilder的区别了解更多,真心希望String、StringBuffer和StringBuilder的区别能帮助到你, 小编会一直给你带来更多教程资源文章信息。
本文由第三方用户分享仅代表作者观点,不代表本网站立场,秉承互联网开放分享的精神,目的在于传递更多信息,加强各行业互通交流,但对内容不作任何保证或承诺,请读者自行参考斟酌。网站发布的信息(包含但不限于版式、图片、字体、文章等素材)由第三方用户分享,版权归原作者所有,本站不承担任何相关的版权纠纷等相关责任。如您认为本篇内容侵犯了您的权益,请与我们联系,我们会及时处理。
豌豆资源网专注分享全网综合资源网站大全,致力于超实用的内容资源搜索。
转载请注明: 本文标题:String、StringBuffer和StringBuilder的区别 本文地址:https://55wd.com/s111716/