String StringBufferStringBuilder三者的区别

Posted xiaocaiyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String StringBufferStringBuilder三者的区别相关的知识,希望对你有一定的参考价值。

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。

 

以上是关于String StringBufferStringBuilder三者的区别的主要内容,如果未能解决你的问题,请参考以下文章

“字符串”类型的参数不可分配给“$string”类型的参数 | `$string.$string` | `$string.$number`'

Activity 类型的方法 managedQuery(Uri, String[], String, String[], String) 已弃用

C# String与string的区别

Scala RDD[(String,String)] 到 RDD[String]

在JS中String 和string啥区别?

Android String[] string = new String[]{““,““}