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()
相关推荐
zephyr0516 分钟前
C++ STL unordered_set 与 unordered_map 完全指南
开发语言·数据结构·c++
填满你的记忆31 分钟前
【从零开始——Redis 进化日志|Day5】分布式锁演进史:从 SETNX 到 Redisson 的完美蜕变
java·数据库·redis·分布式·缓存
lendsomething32 分钟前
Spring 多数据源事务管理,JPA为例
java·数据库·spring·事务·jpa
Never_Satisfied33 分钟前
在JavaScript / HTML中,HTML元素自定义属性使用指南
开发语言·javascript·html
Ulyanov37 分钟前
大规模战场数据与推演:性能优化与多视图布局实战
开发语言·python·性能优化·tkinter·pyvista·gui开发
nsjqj38 分钟前
JavaEE初阶:多线程初阶(2)
java·开发语言
明天…ling43 分钟前
php底层原理与安全漏洞实战
开发语言·php
爱说实话1 小时前
C# DependencyObject类、Visual类、UIElement类
开发语言·c#
智码未来学堂1 小时前
C语言指针:打开通往内存世界的大门
c语言·开发语言
黎雁·泠崖1 小时前
Java面向对象:对象数组核心+综合实战
java·开发语言