StringBuffer和StringBuilder
import org.junit.Test; /* String是不可变的字符串序列,涉及到字符串的改变,会创建大量的对象 StringBuffer:是线程安全的,效率低,底层是采用char类型的数组存储数据,char数组默认长度是16 StringBuilder:是线程不安全的,效率高,底层是采用char类型的数组存储数据,char数组默认长度是16 共同点:他们的父亲都是AbstractStringBuilder抽象类 * */ public class Demo8 { @Test public void test1(){ String s =""; //StringBuffer sbf = new StringBuffer("从前有座山"); //StringBuffer sbf2 = sbf.append("1").append("2").append(3); StringBuilder sbf = new StringBuilder("从前有座山"); StringBuilder sbf2 = sbf.append("1").append("2").append(3); System.out.println("sbf2 = " + sbf2); int length=sbf2.length();//sbf2 = 从前有座山123 System.out.println("length = " + length);//length = 8 sbf2.setLength(10); System.out.println(sbf2);//从前有座山123 ;这有两个空格 int length2=sbf2.length(); System.out.println("length2 = " + length2);//length2 = 10 StringBuffer sbf3 = new StringBuffer("从前有座山山里有座庙"); //返回元素第一次出现的下标 int idx1=sbf3.indexOf("山"); System.out.println("idx1 = " + idx1);//idx1 = 4 //返回元素最后出现的下标 int idx2=sbf3.lastIndexOf("山"); System.out.println("idx2 = " + idx2);//idx2 = 5 //将指定元素添加到指定位置 sbf3.insert(6,"那边"); System.out.println(sbf3);//从前有座山山那边里有座庙 //删除指定元素[开始下标,结束下标) sbf3.delete(1,3); System.out.println(sbf3);//从座山山那边里有座庙 //删除指定位置的字符 sbf3.deleteCharAt(0); System.out.println(sbf3);//座山山那边里有座庙 //设置指定位置的字符 sbf3.setCharAt(0,'一'); System.out.println(sbf3);//一山山那边里有座庙 } }
代码2
package com.atguigu.day15; public class Demo9 { public static void main(String[] args) { testString(); testStringBuffer(); testStringBuilder(); } private static void testStringBuilder() { long start=System.currentTimeMillis(); StringBuilder sbd=new StringBuilder(""); for (int i = 0; i <10000 ; i++) { sbd.append(i); } long end =System.currentTimeMillis(); System.out.println("sbd用时:"+(end-start)); } private static void testStringBuffer() { long start=System.currentTimeMillis(); StringBuffer sbf=new StringBuffer(""); for (int i = 0; i <10000 ; i++) { sbf.append(i); } long end =System.currentTimeMillis(); System.out.println("sbf用时:"+(end-start)); } private static void testString() { long start=System.currentTimeMillis(); String s1=""; for (int i = 0; i <10000 ; i++) { s1+=i; } long end =System.currentTimeMillis(); System.out.println("s1用时:"+(end-start)); } }
输出
s1用时:774 sbf用时:2 sbd用时:1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构