JAVA String StringBuffer StringBuilder 区别
2017-11-09 13:57
441 查看
StringBuffer是线程安全的,在源码中可以见到synchronized关键字,效率低
效率比较
伪代码
使用纳秒比较
结果
Stirng消耗的时间为:20787105769
StirngBuilder消耗的时间为:3617151
StirngBuffer消耗的时间为:5312005
String的”==”与 .equals
String重写了equals方法
所以”==”比较的是内存中的地址,equals比较的是内容
伪代码
结果
false
false
true
false
false
false
false
效率比较
伪代码
public static void testRunTime() { String str = new String(); StringBuffer sb1 = new StringBuffer(); StringBuilder sb2 = new StringBuilder(); long startTime = System.nanoTime(); for (int i = 0; i < 100000; i++) { str = str + i; } long endTime = System.nanoTime(); System.out.println("Stirng消耗的时间为:" + (endTime - startTime)); startTime = System.nanoTime(); for (int i = 0; i < 100000; i++) { sb2.append(i); } endTime = System.nanoTime(); System.out.println("StirngBuilder消耗的时间为:" + (endTime - startTime)); startTime = System.nanoTime(); for (int i = 0; i < 100000; i++) { sb1.append(i); } endTime = System.nanoTime(); System.out.println("StirngBuffer消耗的时间为:" + (endTime - startTime)); }
使用纳秒比较
结果
Stirng消耗的时间为:20787105769
StirngBuilder消耗的时间为:3617151
StirngBuffer消耗的时间为:5312005
String的”==”与 .equals
String重写了equals方法
所以”==”比较的是内存中的地址,equals比较的是内容
伪代码
String str1 = "a"; String s1 = "a"; String str2 = "b"; String str = str1 + str2; String str3 = "ab"; String str4 = "a" + str2; String str5 = new String("ab"); StringBuffer str6 = new StringBuffer("a"); StringBuffer str7 = str6.append("b"); StringBuffer str8 = new StringBuffer("ab"); System.out.println(str1 + str2 == str3);//三个不同的内存地址 System.out.println(str == str3);// str3在编译期间就可以确定,str由变量组成 System.out.println(str1 == s1);// 这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"a"的这么一个对象,它的判断依据是String类equals(Object // obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。 System.out.println(str3 == str4);// 同第二个解释 System.out.println(str5.toString() == str3);// str5在堆中开辟空间,栈中保存引用,str3在字符串常量池中,两者内存地址不同 System.out.println(str5.toString() == str7.toString());// 两个不同的对象,内存地址不同 System.out.println(str8.toString() == str7.toString());// 两个不同的对象,内存地址不同
结果
false
false
true
false
false
false
false
相关文章推荐
- Java中String/StringBuffer/StringBuilder区别
- java.lang.StringBuffer与java.lang.StringBuilder的作用?区别是什么?
- Java String/StringBuilder/StringBuffer的区别
- Java String,StringBuilder和StringBuffer的区别 StringBuilder > StringBuffer> String
- JAVA基础之InterView(一)--String+StringBuffer+StringBuilder的区别
- 浅谈java中String StringBuffer StringBuilder的区别
- StringBuilder StringBuffer String的区别(源码分析)-java
- Java中String和StringBuffer/StringBuilder的区别
- Java软件低级错误(二十 ):正确理解String/StringBuffer/StringBuilder的性能区别
- java语言:String StringBuffer StringBuilder区别
- java 面试专题(二)String StringBuffer StringBuilder的区别
- Java中String StringBuffer StringBuilder比较
- String StringBuffer StringBuilder的区别
- String StringBuilder StringBuffer的区别
- String StringBuffer StringBuilder 的区别
- Java的String StringBuffer StringBuilder
- String \StringBuffer \StringBuilder之间的区别
- 阿里面经之解答 by cmershen(3)——String/StringBuffer/StringBuilder,Java序列化,线程安全,线程同步,ThreadLocal
- 黑马程序员_毕向东Java基础_集合(1)String&StringBuffer&StringBuilder&基本数据类型包装类
- String StringBuffer StringBuilder区别