Java基础第二遍-13常用对象-StringBuffer-StringBuilder
常用对象
StringBuffer(线程安全,做了线程同步)
介绍
- 字符串的组成原理就是通过该类实现的
- StringBuffer可以对字符串内容进行增删
- StringBuffer是一个容器(字符串缓冲区)
- 很多方法于String相同
- StringBuffer是可变长度(初始默认长度为16个字符,超过的也可以存储)
基本操作
- 添加,可以是任意类型的数据,byte和short可以自动转型为int
- 插入
-
删除
-
修改
-
package com.bixiangdong.api; public class StringBuffer1 { public static void main(String[] args) { testAppend(); testInsert(); testReplace(); testDelete(); } public static void testAppend(){ //创建缓冲区对象 StringBuffer sb = new StringBuffer(); //执行添加方法 sb.append(3); sb.append("fdsa"); System.out.println(sb); } public static void testInsert(){ //创建缓冲区对象 StringBuffer sb = new StringBuffer(); //执行插入 sb.append("3fdsafd"); sb.insert(1,"fdsa");//从插入到下标为1的地方 System.out.println(sb); } public static void testDelete(){ //创建缓冲区对象 StringBuffer sb = new StringBuffer(); //执行删除方法 sb.append("fdsafsda"); sb.delete(1,3);//包含头不包含尾 //清空 sb=new StringBuffer(); sb.delete(0,sb.length()); System.out.println(sb); } public static void testReplace(){ //创建缓冲区对象 StringBuffer sb = new StringBuffer(); //执行替换方法 sb.append("fdsafdsa"); sb.replace(1,3,"fdsafds");//替换一个区域 sb.setCharAt(1,'d');//替换单个位置 System.out.println(sb); } }
StringBuilder(线程不安全,没有做同步)
-
不保证同步,线程不安全
-
功能于StringBuffer一模一样
-
因为是线程不同步的,不需要判断锁,那么其执行速度一定比StringBuffer快
-
//模拟StringBuffer添加同步 class StringBuffer{ Object lock; public StringBuffer append(int x){ synchronized (lock){ } return null; } public StringBuffer delete(int x){ synchronized (lock){ } return null; } }
练习
- 下面哪种方式好?
- 使用StringBuilder要更好一些,因为是同一个对象可变长操作,而String操作的话就会在String常量池中产生很多字符串,很浪费空间
package com.bixiangdong.api;
public class Demo03 {
public static void main(String[] args) {
char[] arr = {'a','j','y','g','s','f','3'};
System.out.println(transString(arr));
System.out.println(transString1(arr));
}
//将字符数组转换为字符串-StringBuilder
static String transString(char[] arr){
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
}
sb.append("]");
return sb.toString();
}
//将字符数组转换为字符串-String
static String transString1(char[] arr){
String str = "[";
for (int i = 0; i < arr.length; i++) {
str=str+arr[i];
}
str=str+"]";
return str;
}
}