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()
相关推荐
谁动了我的代码?5 分钟前
VNC中使用QT的GDB调试,触发断点时与界面窗口交互导致整个VNC冻结
开发语言·qt·svn
毕设源码-赖学姐11 分钟前
【开题答辩全过程】以 花卉交易系统为例,包含答辩的问题和答案
java
We་ct13 分钟前
LeetCode 212. 单词搜索 II:Trie+DFS 高效解法
开发语言·算法·leetcode·typescript·深度优先·图搜索算法·图搜索
OxyTheCrack18 分钟前
【C++】简述main函数中的argc与argv
开发语言·c++
weixin_7042660523 分钟前
Spring整合MyBatis(一)
java·spring·mybatis
翘着二郎腿的程序猿24 分钟前
Maven本地化部署与使用全指南
java·maven
历程里程碑25 分钟前
Linux 49 HTTP请求与响应实战解析 带http模拟实现源码--万字长文解析
java·开发语言·网络·c++·网络协议·http·排序算法
ZVAyIVqt0UFji26 分钟前
高可用虚拟IP(HaVip)技术详解:原理、设计与应用
开发语言·网络·网络协议·tcp/ip·perl
飞Link27 分钟前
深度解析 TS2Vec:时序表示学习中的层次化建模(Hierarchical Contrastive Learning)
开发语言·python·学习·数据挖掘
IronMurphy28 分钟前
【算法二十】 114. 寻找两个正序数组的中位数 153. 寻找旋转排序数组中的最小值
java·算法·leetcode