String、StringBuffer和StringBuilder的区别

IT教程 4年前 (2020) https://www.55wd.com

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对象的内存存储空间图

String、StringBuffer和StringBuilder的区别

  可以看出来,再次给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对象的内存空间图:

String、StringBuffer和StringBuilder的区别

  所以说StringBuffer对象是一个字符序列可变的字符串,它没有重新生成一个对象,而且在原来的对象中可以连接新的字符串。

StringBuilder

  StringBuilder类也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。

StringBuffer是如何实现线程安全的呢?

StringBuffer类中实现的方法:

String、StringBuffer和StringBuilder的区别

StringBuilder类中实现的方法:

String、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的区别能帮助到你, 小编会一直给你带来更多教程资源文章信息。

版权声明: 发表于 2020-07-14 21:48:34。

本文由第三方用户分享仅代表作者观点,不代表本网站立场,秉承互联网开放分享的精神,目的在于传递更多信息,加强各行业互通交流,但对内容不作任何保证或承诺,请读者自行参考斟酌。网站发布的信息(包含但不限于版式、图片、字体、文章等素材)由第三方用户分享,版权归原作者所有,本站不承担任何相关的版权纠纷等相关责任。如您认为本篇内容侵犯了您的权益,请与我们联系,我们会及时处理。

豌豆资源网专注分享全网综合资源网站大全,致力于超实用的内容资源搜索。

转载请注明:
本文标题:String、StringBuffer和StringBuilder的区别
本文地址:https://55wd.com/s111716/