String 是一个不可变的字符串,做频繁的拼接操作,性能比较差
String的添加时间(毫秒)
public static void main(String[] args) {
//记录开始时间
long starTime=0L;
//记录结束时间
Long endTime=0L;
/*
System.currentTimeMillis() 获取系统时间(以毫秒值为单位时间)
*/
starTime=System.currentTimeMillis();
String s1="";
for (int i = 0; i < 50000; i++) {
s1+=i;
}
//不同的电脑运行速度不同,时间也不同
endTime=System.currentTimeMillis();
System.out.println((endTime-starTime));//输出5741
}
/*三种的异同点
类名 String StringBuilder StringBuffer
对象类型 字符串常量 字符串变量` 字符串变量
线程安全性 不安全 不安全 安全(数据准确)
(不安全指的是多个对象可以同时操作,安全是只能等这个对象操作完后,另外的对象才可以操作)
执行效率 低 高 中
*/
可变字符串和不可变字符串本质上就是底层char数组有没有加final的区别
可变字符串 StringBuffer StringBuilder
- 这两个类型方法和功能完全相同
- 不一样是的就是StringBuffer中的方法采用的加锁效果,线程安全,StringBuilder没有加锁,线程不安全,效率高
String数组添加字符是创建在一新的数组在进行添加
StringBuilder数组添加字符自己扩容添加就可以了
public static void main(String[] args) {
/*
StringBuilder() 空的可变序列
StringBuilder(String str) 根据指定字符串创建可变序列
*/
StringBuilder s3=new StringBuilder();
StringBuilder s4=new StringBuilder("123");
System.out.println(s3);//什么也不输出
System.out.println(s4);//123
//StringBuilder常用的方法
/*
增:append() 提供了很多的append方法用于各类型的内容拼接
删:delete(int start, int end) 开头和结束,但是不包括结束位置,即顾头不顾尾
改:
修改连续多个
replace(int start, int end, String str) 开头和结束,以及要替换的字符串 ,也是顾头不顾尾
单个修改
setCharAt(int index, char ch) 下标 要替换的字符
插:insert(int offset,XXX) 提供了很多的inset方法用于各类型的内容插入
*/
s3.append("123");
s4.append(false);
System.out.println(s3);//123
System.out.println(s4);//123false
s4.delete(2,5);//输出 12lse
System.out.println(s4);
s4.replace(2,4,"yy");//输出12yye
System.out.println(s4);
s4.setCharAt(1,'a');//输出1ayye
System.out.println(s4);
s4.insert(0,true);//输出true1ayye
System.out.println(s4);
}
测试StringBuffer的添加时间(毫秒)
//记录开始时间
long starTime1=0L;
//记录结束时间
Long endTime1=0L;
/*
System.currentTimeMillis() 获取系统时间(以毫秒值为单位时间)
*/
starTime1=System.currentTimeMillis();
StringBuffer str=new StringBuffer();
for (int i = 0; i < 50000; i++) {
str.append(i);
}
endTime1=System.currentTimeMillis();
System.out.println((endTime1-starTime1));//输出2