Java基础知识总结(7)

StringBuffer类

StringBuffer类,线程安全的可变字符序列,初始化容量为16个字符。一个类似于String的字符串缓冲区,但是不能修改。

常用的是append和insert方法,可以重载,以接纳不同类型的参数类型 x.append("y") 等价于 insert(x.length,y)

复制代码
/*
在实际开发过程中频繁使用字符串拼接会引起资源的浪费
在Java中的字符串是不可变的,每拼接一次就会产生新的字符串
这样会占用大量的方法区内存,造成方法区内存的浪费
String a="hello";
 a+="world";
 以上两行代码,导致在方法区字符串常量池中,创建了三个常量
 “hello”
 "world"
 "helloworld"
 
*/
public class StringBufferTest{
    public static void main(String [] args){
        String s="";
        for(int i=0;i<100;i++){
           s+=i;   
        }
        /*
        这样写会造成大量的方法区常量池内存的浪费,造成很大的压力
        */
    }
}
复制代码
/*
 开发过程中如果需要进行大量的字符串拼接,建议使用StringBuffer
 java.lang.StringBuffer
 java.lang.StringBuilder
*/
public class StringBufferTest{
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //创建一个初始化容量为16的 byte[] 数组。(字符串缓冲区对象)
        StringBuffer stringBuffer = new StringBuffer();
        //拼接字符串统一调用append()方法
        stringBuffer.append("a");
        stringBuffer.append("b");
        stringBuffer.append("a");
        //append方法在进行追加时,如果byte数组满了,会自动进行扩容
        System.out.println(stringBuffer.toString());//不写也会默认调用toString方法
        
        //aba
        
        
        //如何优化StringBuffer的性能?
        /*在创建StringBuffer时尽可能给一个初始化容量
         * 尽量减少底层的扩容次数,预估计一下,给一个大一点的容量
         * */
        //String 和 StringBuffer底层都是byte[] 数组。区别是String中的byte数组是被final修饰的,一旦定义不会被改变
        //StringBuffer 原理是数组容量 地址会指向新的字符串,之前的会被释放
        StringBuffer sb = new StringBuffer(12);//给一个合适的初始化容量,能够优化程序,扩容次数越少,效率越高
        sb.append("hello");
        sb.append("world");
        System.out.print(sb);
    }
}
方法 描述
append(String str) 在字符串末尾追加字符串
delete(int start,int end) 删除区间内字符(前闭后开) 后面往前移,在字符串基础上操作
deleteCharAt(int index) 删除索引处字符
replaceCharAt(int start,int end,str) 替换区间处字符
substring(int start) 从起始位置截取到末尾
substring(int start,int end) 从索引strart位置到索引end
insert(int offset,str) 从索引处插入字符串
indexOf(str) 第一次出现的位置
reverse() 字符串序列翻转
toString 对象转成字符串
insert()
相关推荐
庸俗今天不摸鱼7 分钟前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
菠菠萝宝8 分钟前
【Java八股文】10-数据结构与算法面试篇
java·开发语言·面试·红黑树·跳表·排序·lru
奔跑吧邓邓子11 分钟前
【Python爬虫(36)】深挖多进程爬虫性能优化:从通信到负载均衡
开发语言·爬虫·python·性能优化·负载均衡·多进程
不会Hello World的小苗14 分钟前
Java——链表(LinkedList)
java·开发语言·链表
lsx20240627 分钟前
Perl 面向对象编程指南
开发语言
Allen Bright1 小时前
【Java基础-46.3】Java泛型通配符详解:解锁类型安全的灵活编程
java·开发语言
柃歌1 小时前
【UCB CS 61B SP24】Lecture 7 - Lists 4: Arrays and Lists学习笔记
java·数据结构·笔记·学习·算法
柃歌1 小时前
【UCB CS 61B SP24】Lecture 4 - Lists 2: SLLists学习笔记
java·数据结构·笔记·学习·算法
画个逗号给明天"1 小时前
C++STL容器之list
开发语言·c++
是姜姜啊!1 小时前
redis的应用,缓存,分布式锁
java·redis·spring