StringBuffer,StringBuilder,

这篇具有很好参考价值的文章主要介绍了StringBuffer,StringBuilder,。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. StringBuffer
    1. 结构示意图, Serializable,可以实现网络传输StringBuffer,StringBuilder,
    2. package com.jshedu.StringBuffer_;
      
      /**
       * @author Mr.jia
       * @version 1.0
       */
      
      public class StringBuffer01 {
          public static void main(String[] args) {
              /*
              1.在父类中AbstractStringBuilder 属性char[] value不是final
                该value数组存放 字符串内容,引出存放在堆中。
              2.StringBuffer 是一个final类,不能被继承
               */
              StringBuffer hello = new StringBuffer("hello");
          }
      }
      

      StringBuffer字符内容是存在char[] value,所有在变化(增加/删除)不用每次都更换地址(即不是每次创建新对象),所以效率高于String

    3. String保存的是字符串常量,里面的值不能更改(每次String类的更新实际上就是更改地址,是里面又创建了个新的对象,所以地址更改)效率较低,private final char value[];

    4. StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址【当把原数组占满才开辟一个新的大的数组然后把原先的数据复制过来,这时地址才改变】,效率高。char[] value;//这个放在堆

  2. StringBuffer构造器
    1. package com.jshedu.StringBuffer_;
      
      /**
       * @author Mr.jia
       * @version 1.0
       */
      
      public class StringBuffer02 {
          public static void main(String[] args) {
              //1.创建一个 大小为16的char[],用于存放字符内容
              StringBuffer stringBuffer = new StringBuffer();
              //2.通过构造器指定char[]大小
              StringBuffer stringBuffer1 = new StringBuffer(100);
      
              //3.通过给一个String 创建 StringBuffer,char[] 大小就是str.length()+16
              StringBuffer hello = new StringBuffer("hello");
      
      
          }
      
      }
      

      构造器指定char[]的大小不一样

    2. package com.jshedu.StringBuffer_;
      
      /**
       * @author Mr.jia
       * @version 1.0
       */
      
      public class StringBuffer03 {
          public static void main(String[] args) {
              //String--->StringBuffer
              String str = "hello tom";
              //方式1:使用构造器
              //注意:返回的才是StringBuffer对象,对str本身没有影响
              StringBuffer stringBuffer = new StringBuffer(str);
              //方式2:使用append方法
              StringBuffer stringBuffer1 = new StringBuffer();
              stringBuffer1 = stringBuffer1.append(str);
      
              //StringBuffer--->String
              StringBuffer stringBuffer3 = new StringBuffer("红楼梦");
              //方式1 使用StringBuffer提供的 toString方法
              String s = stringBuffer3.toString();
              //方式2 使用构造器
              String s1 = new String(stringBuffer3);
      
          }
      }
      

      转换的方式

    3. package com.jshedu.StringBuffer_;
      
      /**
       * @author 韩顺平
       * @version 1.0
       */
      public class StringBufferMethod {
          public static void main(String[] args) {
      
              StringBuffer s = new StringBuffer("hello");
              //增
              s.append(',');// "hello,"
              s.append("张三丰");//"hello,张三丰"
              s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏100true10.5"
              System.out.println(s);//"hello,张三丰赵敏100true10.5"
      
      
              //删
              /*
               * 删除索引为>=start && <end 处的字符
               * 解读: 删除 11~14的字符 [11, 14)
               */
              s.delete(11, 14);
              System.out.println(s);//"hello,张三丰赵敏true10.5"
              //改
              //老韩解读,使用 周芷若 替换 索引9-11的字符 [9,11)
              s.replace(9, 11, "周芷若");
              System.out.println(s);//"hello,张三丰周芷若true10.5"
              //查找指定的子串在字符串第一次出现的索引,如果找不到返回-1
              int indexOf = s.indexOf("张三丰");
              System.out.println(indexOf);//6
              //插
              //老韩解读,在索引为9的位置插入 "赵敏",原来索引为9的内容自动后移
              s.insert(9, "赵敏");
              System.out.println(s);//"hello,张三丰赵敏周芷若true10.5"
              //长度
              System.out.println(s.length());//22
              System.out.println(s);
      
          }
      }
      

      StringBuffer的方法

  3. StringBuilder

    1. 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

    2. StringBuilder 上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。

    3. StringBuilder 的实例用于多个线程是不安全的。

  4. String,StringBuilder,StringBuffer比较

    1. StringBuffer和StringBuilder非常类似,均代表可变的字符序列,而且方法也一样。

    2. String:不可变字符序列,效率低,但是复用率高

    3. StringBuffer:可变字符序列,效率较高(增删),线程安全,看源码

    4. StringBuilder:可变字符序列,效率最高,线程不安全

    5. String使用注意说明:String s="a";//创建一个字符

      1. s+="b";//实际上原来的"a"字符串对象已经丢弃了,现在又产生一个字符串s+"b"(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能==>结论:如果我们对String做大量修改,不用String。

  5. String,StringBuilder,StringBuffer的选择

    1. 如果字符串存在大量的修改操作,一般使用 StringBuffer 或StringBuilder

    2. 如果字符串存在大量的修改操作,并在单线程的情况,使用 StringBuilder

    3. 如果字符串存在大量的修改操作,并在多线程的情况,使用 StringBuffer

    4. 如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息等

    5. StringBuilder的方法使用和 StringBuffer 一样文章来源地址https://www.toymoban.com/news/detail-412000.html

到了这里,关于StringBuffer,StringBuilder,的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FANUC机器人各型号控制柜急停板单元介绍与接线示意图

    FANUC机器人急停电路板安全回路接口包括外部急停输入、安全门开关、机器人急停输出、伺服切断等,并通过硬接线进行接线。

    2024年02月16日
    浏览(234)
  • StringBuilder > StringBuffer > String

    StringBuilder , StringBuffer 和 String 都是 Java 中用于操作字符串的类,但它们在性能、线程安全性和用途上有一些区别。 1. String: String 类是 Java 中的不可变字符串类。一旦创建了字符串对象,它的值就不能被修改。每次对字符串进行操作(连接、替换等),都会创建一个新的字符

    2024年02月11日
    浏览(49)
  • StringBuffer与stringBuilder

    对于String的学习: final 修饰了String类所以String类是无法被修改的,并且不是基本数据类型。 当我们用双引号创建一个字符串时,jvm首先在字符串常量池中找寻具有相同值的字符串如果找到了,他将返回字符串常量池中的字符串对象引用。否则就在常量池中创建字符串对象并返

    2023年04月08日
    浏览(26)
  • StringBuffer,StringBuilder,

    StringBuffer 结构示意图, Serializable,可以实现网络传输 StringBuffer字符内容是存在char[] value,所有在变化(增加/删除)不用每次都更换地址(即不是每次创建新对象),所以效率高于String String保存的是 字符串常量 ,里面的值不能更改( 每次String类的更新实际上就是更改地址

    2023年04月13日
    浏览(26)
  • StringBuilder和StringBuffer的区别

    部分引用:深入理解Java并发之synchronized实现原理 在java中,我们常用 String 来创建和操作字符串,从下面两幅图中可以看到, String 是使用char数组来存储数据,并且是使用 final 修饰的,所以 String 的值一经定义是不可变的。 JDK8及之前: JDK9及之后: 我们每次对 String 的操作都

    2024年02月02日
    浏览(31)
  • StringBuffer和StringBuilder的区别

    stringbuffer和stringbuilder的区别在于:线程安全不同、缓冲区不同、性能不同。StringBuffer 适用于用在多线程操作同一个 StringBuffer 的场景,如果是单线程场合 StringBuilder 更适合。 1.线程安全 StringBuffer:线程安全,StringBuilder:线程不安全。因为 StringBuffer 的所有公开方法都是 syn

    2024年02月13日
    浏览(30)
  • Java StringBuffer和StringBuilder类

    由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。与String不同的是,StringBuffer和StringBuilder是对字符串本身进行修改,并且不产生新的对象,而String是产生新的字符串进行修改。 由于StringBuffer的方法和StringBuilder方法大部分是相同的,所

    2024年02月12日
    浏览(34)
  • String、StringBuffer、StringBuilder 的区别?

    一. 介绍 String、StringBuffer、StringBuilder:    前言: String、StringBuffer、StringBuilder 均在java.lang包下; String:  在Java中,String是一个特殊的引用类型,用于表示文本字符串。它提供了许多方法来操作和处理字符串,比如连接、截取、查找、替换等。 String类内部使用字符数组(ch

    2024年02月13日
    浏览(57)
  • Java StringBuilder类与StringBuffer类

    一、ShtringBuilder类是什么         StringBuilder类是final修饰的没有子类,不能被继承,表示一个可变的字符序列,不保证线程同步。         例:“hello”+\\\"world\\\"+\\\"nihao\\\"-----------\\\"helloworldnihao\\\"---一个存储空间 二、StringBuilder类的构造方法         1.StringBuilder()创建一个初始容

    2024年02月11日
    浏览(31)
  • String、StringBuffer和StringBuilder的详解

    目录 一、String讲解 1.String(String字符串常量) 2.String 拼接方式与性能的影响 二、StringBuffer 和 StringBuilder 讲解 1.StringBuffer 和 StringBuilder 使用场景:(StringBuffer、StringBuilder字符串变量) 2.StringBuffer的使用 3.StringBuffer与StringBuilder的线程安全性问题  4.synchronized的含义:(线程同步机制

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包