String、StringBuilder & StringBuffer

本文介绍了StringBuilder在字符串拼接中的优势,包括其append方法避免对象创建、在内部循环中的应用,以及与String和StringBuffer的区别,重点讲解了线程安全问题和内存效率。此外,还涵盖了StringBuffer的反转、删除和插入操作,以及两者之间的转换方式。

StringBuilder:

1、String 拼接时,底层会优化成 StringBuilder 通过 append() 方法来进行,因为 append() 不会产生新的对象

sb1.append("我是字符串").append("我还是字符串");     

//(sb1已经通过 Builder new 出来了,下文皆同)

String str1 = "12345";
str1 = str1 + "上山打老虎";
//普通的String拼接底层会优化为StringBuildr:
StringBuilder sb1 = new StringBuilder();
sb1.append("12345,");
sb1.append("上山打老虎。");//append不会产生新的一个对象
System.out.println(sb1);
sb1.append("老虎打不过,").append("打着了小松鼠。");
System.out.println(sb1);

2、字符串内部循环时,尽量使用 StringBuilder 或 StringBuffer 

//内部循环:                
String str2 = "门前大桥下游过一群鸭";               
StringBuilder sb2 = new StringBuilder();                
for (int i = 0; i < 10; i++){                        
       sb2.append(i);                
}                
str2 = str2+sb2.toString();                
System.out.println(str2);

StringBuffer:

1、2B(StringBuilder & StringBuffer,下文皆同)功能几乎相同

2、2B 常用部分功能:

(1)字符串翻转

sb.reverse();

(2)删除指定范围的字符串:

sb.delete(2,6)

注:其中2表示起始下标,6表示结束下标。[ )

(3)插入指定范围的字符串:

sb.insert(2,str);

注:会在下标2的后方开始插入,插入后连接之前的内容;str代表其他字符串

3、2B与String之间的转化(以Buffer举例):

(1)String 转为 Buffer 需要使用构造方法

public class text{
       //String转成Buffer需要调用构造方法
       public static StringBuffer func1(String str){
                return new StringBuffer(str);
        }

        public static void main(String[] args) {
                //String转成Buffer需要调用构造方法
                String str = "你是人间四月天";
                StringBuffer sb =  func1(str);
                System.out.println(sb);
        }
}

(2)Buffer 转成 String 需要使用toString 方法。

public class text{
       //Buffer转成String需要调用toString方法
       public static String func2(StringBuffer sb){
                return sb.toString();
        }

        public static void main(String[] args) {
                //Buffer转成String需要调用toString方法
                StringBuffer sb = new StringBuffer();
                sb.append("我是人间四月天");
                String str = func2(sb);
                System.out.println(str);
        }
}

2B的主要区别:

Buffer 比 Builder 多一个修饰词“ Synchronized ”,采用线性同步处理,以保证线性安全。

所以,单线程一般使用 Builder多线程一般使用Buffer。


String 与 2B 的主要区别:

类型源码value值区别存放位置区别字符串更改区别
Stringvalue 为 final 类型

不一定存放在常量池

字面值一定在常量池

更改字符串时新建对象
2Bvalue 为非 final 类型一定在堆中更改字符串时不重建对象
小结

String 内容不可修改

2B 可修改

2B 一定在堆中是因为

调用了 append()  方法

2B相对更加节省内存

注:表格参考来源:周周 嘿嘿:关于String和StringBuffer和StringBulider

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值