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

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

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

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

String:字符串常量 。

StringBufferStringBuilder是字符缓冲变量。

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Murmur下载_highwayhash

    Murmur下载_highwayhashpackageorg.videolan.vlc;/**Murmurhash2.0.**Themurmurhashisarelativefasthashfunctionfrom*http://murmurhash.googlepages.com/forplatformswithefficient*multiplication.**Thisisare-i…

    2022年10月19日
    0
  • 记一次网站渗透测试

    记一次网站渗透测试在这里把测试站点都127.0.0.1:1.进行收集:1)端口信息扫描,没有太大的利用价值2)发现网站后台:127.0.0.1/admin/login.php使用万能密钥成功登陆网站后台2.尝试上传一句话获取网站webshell文件上传页面进行上传是发现进行了过滤,不能上传php文件,尝试使用burp绕过,发现进行后台验证,不甘心!!!!!3.在后台随便翻找,发现一处文件下载…

    2022年6月21日
    27
  • asp.net dropdownlist的值怎么设置_redis skiplist

    asp.net dropdownlist的值怎么设置_redis skiplistList productlist = ProductAdapter.Instance.GetList();dlproductname.DataSource = productlist;dlproductname.DataTextField = “ProductName”;dlproductname.DataValueField = “id”;dlproduc

    2022年10月8日
    0
  • 如何理解java方法的传值和传引用的参数传递方式_指针参数传递

    如何理解java方法的传值和传引用的参数传递方式_指针参数传递结论:1)当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值2)当使用引用数据类型作为方法的形参时,若在方法体中修改形参指向的数据内容,则会对实参变量的数值产生影响,因为形参变量和实参变量共享同一块堆区;3)当使用引用数据类型作为方法的形参时,若在方法体中修改形参变量的指向,此时不会对实参变量的数值产生影响,因此形参变量和实参变量分别指向不同的堆区例一:基本数据类型作为形参,运行结果不改变实参publicclassMain{publicstatic

    2022年8月30日
    5
  • yolov5算法详解(yolov3算法图解)

    全网YOLO最详讲解,从v1到v5!从小白到大佬!

    2022年4月12日
    819
  • Android通过HTTP POST带參訪问asp.net网页

    Android通过HTTP POST带參訪问asp.net网页

    2022年1月29日
    40

发表回复

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

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