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()
相关推荐
Whisper_Sy6 小时前
Flutter for OpenHarmony移动数据使用监管助手App实战 - 网络状态实现
android·java·开发语言·javascript·网络·flutter·php
乂爻yiyao6 小时前
1.1 JVM 内存区域划分
java·jvm
Bony-6 小时前
Go语言垃圾回收机制详解与图解
开发语言·后端·golang
hmywillstronger6 小时前
【Rhino】【Python】 查询指定字段并cloud标注
开发语言·python
新缸中之脑6 小时前
Weave.js:开源实时白板库
开发语言·javascript·开源
我能坚持多久6 小时前
D16—C语言内功之数据在内存中的存储
c语言·开发语言
leo__5206 小时前
C#与三菱PLC串口通信源码实现(基于MC协议)
开发语言·c#
没有bug.的程序员7 小时前
Spring Cloud Eureka:注册中心高可用配置与故障转移实战
java·spring·spring cloud·eureka·注册中心
二十雨辰7 小时前
[python]-函数
开发语言·python
CryptoRzz7 小时前
如何高效接入日本股市实时数据?StockTV API 对接实战指南
java·python·kafka·区块链·状态模式·百度小程序