String 、 StringBuffer、StringBuilder三者的区别

1、String类表示内容不可修改的字符串,StringBuffer(线程安全)和StringBuilder(线程不安全)类都表示内容可以被修改的字符串。

2、执行速度:StringBuilder > StringBuffer > String

String执行速度最慢原因:

  String的底层代码为一个用final修饰的char数组,这意味着定义一个String变量后,该变量的内容是不能够改变的。

  也就是说,你定义一个String变量后,不断的改变其内容,表面上看起来是改变了内容,因为每次输出的内容的确是改变了。但是,实际上是在不断地创建了新的String对象,而变量不断地指向新的String对象,所以看起来是改变了String对象的内容。

例如:

1 String s= "string1";
2 s = s+"strign2";

  这两行代码执行后,原始的String对象中的内容没有改变。s原先指向内容是"string1"的String对象,执行了第二句后,这时s不再指向原来的那个对象,而指向了另一个内容是"string1 string2"的对象,原来的那个对象还存在内存中,只是s不在指向它了。所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。

 1      String string = new String();
 2         
 3         StringBuffer sBuffer = new StringBuffer();
 4         //开始时间
 5         long startTime;
 6         //结束时间
 7         long endTime;
 8         
 9         startTime = System.currentTimeMillis();
10         
11         for (int i=0;i<10000;i++) {
12             string += i;
13         }
14         endTime = System.currentTimeMillis();
15         System.out.println("String执行时间:"+(endTime-startTime));
16         
17         startTime = System.currentTimeMillis();
18         
19         for (int i=0;i<10000;i++) {
20             sBuffer.append(i);
21         }
22         endTime = System.currentTimeMillis();
23         System.out.println("StringBuffer执行时间:"+(endTime-startTime));

执行结果:

1 String执行时间:329
2 StringBuffer执行时间:2

StringBuffer和StringBuilder

  StringBuilder是线程不安全的,所以运行效率高。如果一个字符串是在方法里定义,这种情况下只可能有一个线程访问,不存在不安全的因素,所以可以用StringBuilder。如果要在类里定义成员变量,并且这个类的实例对象会在多线程环境下使用,最好使用StringBuffer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值