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()
相关推荐
要开心吖ZSH6 分钟前
应用集成平台-系统之间的桥梁-思路分享
java·kafka·交互
TsengOnce9 分钟前
阿里云ECS多版本JDK切换
java·python·阿里云
wearegogog12312 分钟前
基于C#的FTP客户端实现方案
java·网络·c#
听风吟丶13 分钟前
Java NIO 深度解析:从核心组件到高并发实战
java·开发语言·jvm
野生技术架构师19 分钟前
Java面试题及答案总结(互联网大厂新版)
java·面试·状态模式
a努力。21 分钟前
小红书Java面试被问:ThreadLocal 内存泄漏问题及解决方案
java·jvm·后端·算法·面试·架构
此生只爱蛋21 分钟前
【Redis】String 字符串
java·数据库·redis
C++业余爱好者21 分钟前
Java开发中Entity、VO、DTO、Form对象详解
java·开发语言
zmzb010322 分钟前
C++课后习题训练记录Day50
开发语言·c++
froginwe1123 分钟前
`.toggleClass()` 方法详解
开发语言