StringBuilder类和链式编程

1.String类的劣势

字符串是常量;它们的值在创建之后不能更改。
字符串缓冲区支持可变的字符串。
因为 String 对象是不可变的,所以可以共享

String类的底层是被final修饰的byte数组:private final char value[];
因此,其值不可改变。
字符串每相加一次,就会重新占用一块内存。
如:“a”+“b”+“c”:这三个字符串本身会占用一块空间。当执行"a"+“b”=“ab"又占用一个空间
最后"ab”+“c”="abc"结果又占用一块空间。一个字符串相加,便占用了5块字符串的空间,可见其效率低下,空间复杂度之高。

2. StringBuilder类

StringBuilder类:字符串缓冲区类
StringBuilder类底层也是一个数组,但其长度可变。
底层定义为:byte[] value = new byte[16];初始长度为16字节,空间不够,自动扩容。
字符串每相加一次,仍然还是在原缓冲区放入字符串,始终在一个字符串缓冲区
如:“a”+“b”+"c"只会占用一个字符串缓冲区空间
缓冲区:缓冲区可以提高操作效率。

3. StringBuilder类的构造方法

StringBuilder() 
          //构造一个其中不带字符的字符串,初始容量为 16 个字符。  
StringBuilder(String str) 
          //构造一个字符串,并初始化为指定的字符串内容。 

3. StringBuilder类的成员方法

StringBuilder append(...)  
//添加任意数据类型的字符串格式,并返回当前对象自身
String toString()  
//将StringBuilder对象转化为String对象

示例:

package linxu.day14;

public class demo2 {
    public static void main(String[] args) {
        StringBuilder str1=new StringBuilder();
        StringBuilder str2=new StringBuilder("abc");
        System.out.println("str1:"+str1);
        System.out.println("str2:"+str2);
        System.out.println(str1==str2);//直接==是比较地址值,结果为false,说明不是同一个对象
        str1=str2.append("1");
        System.out.println("str1:"+str1);//根据打印结果,可以看出,append是追加字符串
        System.out.println("str2:"+str2);
        System.out.println(str1==str2);//结果为true,说明是同一个对象,即:append返回值返回的是this,而不是数据值
        //所以,既然返回的是this,是调用对象本身,那么返回值是否接受便无所谓了
        str1.append(23);
        str1.append(8.8);
        str1.append('a');
        System.out.println("str1:"+str1);//append方法可以追加任意数据类型的值,然后转化为字符串跟在原字符串后面
    }
}
/*打印结果
str1:
str2:abc
false
str1:abc1
str2:abc1
true
str1:abc1238.8a
str2:abc1238.8aa90lin
*/

4. 链式编程

链式编程:如果一个方法是返回值是一个对象,那么可以直接继续调用所返回对象的方法,如:

str2.append('a').append(90).append("lin");
System.out.println("str2:"+str2);
//再比如:
System.out.println("abC".toLowerCase().toUpperCase());
//toLowerCase字符串全部转化为小写/toUpperCase字符串全部转化为大写

5. StringBuilder和String的相互转换

StringBuilder->String:使用StringBuilder的toString()方法
String->StringBuilder:使用含参构造StringBuilder(String str)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值