13.StringBuilder类

目录

13.StringBuilder类

13.1.String类和StringBuilder类区别

13.2.字符串拼接问题

13.3.StringBuilder类的构造函数和API

13.StringBuilder类


13.1.String类和StringBuilder类区别

String类:
   1.字符串都是常量,它们的值在创建之后不能更改。
   2.字符串的底层是一个被final修饰的数组,不能改变,是一个常量。即底层private final byte[] value;
   3.进行字符串的相加,内存就会有多个字符串,占用空间多,效率低下。


StringBuilder类:
   1.也称字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串)。
   2.底层也是一个数组,但是没有被final修饰,可以改变长度。byte[] value=new byte[16];
   3.StringBuilder在内存中使用是一个数组,占用空间少,效率高。若超出缓冲区默认容量,会自动扩容


总之:
   字符串是常量,它们的值在创建之后不能更改,因此在字符串相加时需要不断创建字符串对象,效率低。
   字符串缓冲器支持可变的字符串,因此字符串拼接时始终是一个数组中完成。效率高。

13.2.字符串拼接问题

1.由于String类的对象内容不可改变(常量),所以每当进行字符串拼接时,总是会在内存中创建一个新的对象:
  public static void main(String[] args){
     String s="hello";
     s+="word";
     System.out.println(s);
  }


2.分析:
  在API中对String类有这样的描述:字符串是常量,它们的值在创建后不能被修改。
  根据这句话分析上面代码,其实总共产生了三个字符串,即"hello","word","helloword",
  引用变量s首先指向hello对象,最终指向拼接出来的新字符串对象即helloword.

13.3.StringBuilder类的构造函数和API

1.java.lang.StringBuilder类:字符串缓冲区,可以提高字符串效率,底层是一个长度可变的数组。


2.构造方法:
    StringBuilder():构造一个不带任何字符的字符串生成器(底层是可变数组),其初始容量为16个字符
    StringBuilder(String str):构造一个字符串生成器,初始化为指定的字符串内容。


3.StringBuilder类常用2个方法:
  ---public StringBuilder append(...):
      1.字符串缓冲池StringBuilder中添加任意类型(重载)数据返回当前对象自身即this
      2.append方法返回的是this,即调用方法的对象,this==bu3,即把bu3地址赋值给了bu4
      3.使用append方法无需接收返回值,bu5.append("abc");bu5.append(1);...
      4.链式编程:方法返回值是一个对象,则可以继续调用方法。
          append方法返回的是自身对象this,因此仍可以继续调用它的方法append.
          bu6.append("abc").append(1).append(true).append(8.8).append("中");
  ---public String toString():
    StringBuilder对象与String对象相互转换。(StringBuilder和String类区别)
        1.将string-->StringBuilder
          :使用StringBuilder的带参构造方法将字符串转化为StringBuilder
          StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容。
        2.将StringBuilder-->String
          :使用StringBuilder中的toString方法。
          public String toString():把当前StringBuilder对象转化为String对象。


4.关键代码:
  : StringBuilder bu1=new StringBuilder();//空参数构造方法
  : StringBuilder bu2=new StringBuilder("abc");//带字符串的构造方法
  : StringBuilder bu4 = bu3.append("abc"); //使用append方法往字符串缓冲区中添加数据
  : bu5.append("abc");//使用append方法无需接收返回值
  : String str="hello";//String-->StringBuilder
  : StringBuilder bu7=new StringBuilder(str);
  : String s=bu7.toString();//StringBuilder-->String

public class StringBuilder01 {
    public static void main(String[] args) {
        //空参数构造方法
        StringBuilder bu1=new StringBuilder();
        System.out.println(bu1); //bu1:""空的

        //带字符串的构造方法
        StringBuilder bu2=new StringBuilder("abc");
        System.out.println(bu2);//bu2:abc

        //StringBuilder的append方法
        StringBuilder bu3=new StringBuilder();
        //使用append方法往StringBuilder字符串缓冲区中添加数据
        //append方法返回的是this,即调用方法的对象,this==bu3,即把bu3地址赋值给了bu4
        StringBuilder bu4 = bu3.append("abc");
        System.out.println(bu3);
        System.out.println(bu4);
        System.out.println(bu3==bu4);//比较的是地址,true

        //使用append方法无需接收返回值
        StringBuilder bu5=new StringBuilder();
        bu5.append("abc");
        bu5.append(1);
        bu5.append(true);
        bu5.append(1.1);
        bu5.append("中");
        System.out.println(bu5);//输出abc1true1.1中

        /*
          链式编程:方法返回值是一个对象,则可以继续调用方法。
          append方法返回的是自身对象this,因此仍可以继续调用它的方法append
        */
        StringBuilder bu6=new StringBuilder();
        bu6.append("abc").append(1).append(true).append(8.8).append("中");
        System.out.println(bu6);

        //通过StringBuilder构造函数将字符串(对象)转化为StringBuilder对象(字符串缓冲区)
        //String-->StringBuilder
        String str="hello";
        StringBuilder bu7=new StringBuilder(str);
        //往StringBuilder中添加任意数据的字符串形式
        bu7.append("word");
        System.out.println("bu7:"+bu7);//字符串缓冲区中bu7:helloword

        //通过StringBuilder类的toString方法将StringBuilder对象化为String对象
        String s=bu7.toString();
        System.out.println(s);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值