String,StringBuffer和StringBuilder的区别及使用场景[通俗易懂]

String,StringBuffer和StringBuilder的区别及使用场景[通俗易懂]String:字符串常量。StringBuffer与StringBuilder是字符缓冲变量。StringBuffer与StringBuilder中的方法和功能完全是等价的,只是StringBuffer中的方法大都采用了synchronized关键字进行修饰,因此是线程安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。StringBuilder是在…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

String:字符串常量 。

StringBuffer 与 StringBuilder是字符缓冲变量。

StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer中的方法大都采用了synchronized 关键字进行修饰,因此是线程安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。StringBuilder 是在JDK1.5才加入的。jdk的实现中StringBuffer与StringBuilder都继承自AbstractStringBuilder。
     1、String类型的字符串对象是不可变的,一旦String对象创建后,包含在这个对象中的字符系列是不可以改变的,直到这个对象被销毁。
     2、StringBuilder和StringBuffer类型的字符串是可变的,不同的是StringBuffer类型的是线程安全的,而StringBuilder不是线程安全的
     3、如果是多线程环境下涉及到共享变量的插入和删除操作,StringBuffer则是首选。如果是非多线程操作并且有大量的字符串拼接,插入,删除操作则StringBuilder是首选。毕竟String类是通过创建临时变量来实现字符串拼接的,耗内存还效率不高,怎么说StringBuilder是通过JNI方式实现终极操作的。
     4、StringBuilder和StringBuffer的“可变”特性总结如下:
         (1)append,insert,delete方法最根本上都是调用System.arraycopy()这个方法来达到目的
         (2)substring(int, int)方法是通过重新new String(value, start, end – start)的方式来达到目的。因此,在执行substring操作时,StringBuilder和String基本上没什么区别。
     总的来说,三者在执行速度方面的比较:StringBuilder > StringBuffer > String。
 

 

1.使用String类的场景:在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算。

2.使用StringBuffer类的场景:在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装。

3.使用StringBuilder类的场景:在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder,如SQL语句的拼装、JSON封装等。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191205.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • db4o java_DB4O 社区版 8.1.3 发布,面向对象数据库[通俗易懂]

    db4o java_DB4O 社区版 8.1.3 发布,面向对象数据库[通俗易懂]Db4o是一个面向对象数据库,能对复杂的对象结构进行持久化,如树结构等,并使用本地语言进行数据查询,支持单用户模式,多用户模式。社区版本升级到全面支持Linux.使用例子初始化importcom.db4o.cs.Db4oClientServer;publicclassNode{publicStringname;publicNodeLeft;publicNodeRight;}St…

    2022年7月21日
  • Net开源的地址[通俗易懂]

    Net开源的地址[通俗易懂]https://github.com/dotnet其中有corefx,coreclr,roslyn开源等等

    2022年7月15日
  • C++基本概念_c语言 c++区别

    C++基本概念_c语言 c++区别1.    面向对象的程序设计思想是什么?答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.    什么是类?答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。 3.    对象都具有的二方面特征是什么?分别是什么含义?答:对象都具有的特征是:静态特征和动态特征。静态特征是指能描述对象的一些属性;动态特征是指对象表现出来的行为;

    2022年10月3日
  • python打开并读取csv文件_Python中读取csv文件内容方法

    python打开并读取csv文件_Python中读取csv文件内容方法原博文2015-05-1318:22−gg224@126.com85男dd123@126.com52女fgf125@126.com23女csv文件内容如上图,首先导入csv包,调用csv中的方法reader()创建一个对象,由于使用printdata打印出来的内容是集合…相关推荐2016-10-0810:00−python中有一个读写csv…

    2022年7月20日
  • mysql 建前缀索引_MySQL_前缀索引_建立[通俗易懂]

    mysql 建前缀索引_MySQL_前缀索引_建立[通俗易懂]–查看出现频率selectcount(*)ascnt,cityfromsakila.city_demogroupbycityorderbycntdesclimit10;1.selectcount(distinctcity)/count(*)fromsakila.city_demo;*完整列的选择性2.selectcount(distinctleft(ci…

    2022年5月10日
  • 随机事件概率的公理化定义_概率推理

    随机事件概率的公理化定义_概率推理一、统计定义1.定义注:其中(3)运用的是概率的有限可加性(4)(5)2.优点:直观,适用于未知情况缺点:大量重复试验,不便于实际运用;不够严谨精确,不便于理论运用。

    2022年10月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号