大家好,欢迎来到IT知识分享网。
String、StringBuffer 和 StringBuilder 区别
String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,效率低下,大量浪费有限的内存空间,每次生成对象都会对系统性能产生影响,效率低。
StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。
StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。
StringBuffer 适用于用在多线程操作同一个StringBuffer 的场景,如果是单线程场合 StringBuilder 更适合。
StringBuffer 同时最多只有一个线程可以运行这些方法,也就是保证了线程安全。 StringBuilder 没有线程安全机制,运行起来就不用考虑给线程加锁,所以运行效率会比 StringBuffer 要高。
StringBuffer是一个容器,长度可变,可以直接操作字符串,用toString方法变为字符串 。
1.存储
1)append(); //将指定数据加在StringBuffer末尾,返回值也是StringBuffer
StringBuffer sb = new StringBuffer(//可以加str);
StringBuffer sb1=ab.append(数据) //数据可以任何基本数据类型。
2)insert();// 插入
sb.insert(index ,数据);
2.删除
sb.delete(start ,end); //删除start到end的字符内容,这里的所有包含index的操作都是含头不含尾的
sb.deleteCharAt(index);//删除指定位置的字符
//清空StringBuffer缓冲区
sb=new StringBuffer();
sb.delete(0,sb.length());
3.获取
char c = sb.charAt(index);//获取index上的字符
int i = sb.indexOf(char)://获取char字符出现的第一次位置
4.修改
sb =sb.replace(start,end,string)//将从start开始到end的字符串替换为string;
sb.setCharAr(index ,char);//将index位置的字符变为新的char
5.反转 sb.reverse();//将sb倒序
在项目中创建类 Check ,验证字符串操作和字符串生成器操作的效率。
public class Check{
public static void main ( String [] args ){
String str =””;//创建空字符串
long starTime = System . currentTimeMillis();
//定义对字符串操作的起始时间
for ( int i =0; i <10000; i ++){
//利用 for 循环执行10000次操作
str = str +i;//循环追加字符串
}
long endTime = System . currentTimeMillis ();
//定义对字符串操作后的时间
long time=endTime – starTime ;
//计算对字符串执行操作的时间
System . out . println (” String 循环1万次消耗时间:”+ time );//将执行的时间输出
StringBuilder builder = new StringBuilder (“”);//创建字符串生成器
starTime = System . currentTimeMillis ();//定义操作执行前的时间
for ( int j =0; j <10000; j ++){
builder . append ( j );//循环追加字符
}
endTime = System . currentTimeMillis ();
//定义操作后的时间
time= endTime – starTime;//追加操作执行的时间
System.out. println (” StringBuilder循环1万次 消耗时间 :”+ time )://将操作时间输出
}
}
运行结果:String 循环1万次消耗时间:179
StringBuilder 循环1万次消耗时间:0
StringBuffer 、 StringBuilder 、 String 的区别
String 对象类型:字符串常量,线程不安全,执行效率低。
StringBuilder 对象类型:字符串常量,线程不安全,执行效率高。
StringBuffer 对象类型:字符串常量,线程安全,执行效率中等。
StringBuffer 、 StringBuilder 、 String 类的适用场合:
(1)操作少、数据少,用 String 。
(2)单线程,操作多,数据多,用StringBuilder 。
(3)多线程,操作多,数据多,用 StringBuffer。简单的字符串修改时,时间非常快,三者区别不大,只有在大量的字符串修改时,才会显示出 StringBuffer 和 StringBuilder 的优势。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/162694.html