一、String、StringBuffer、StringBuilder的一些概念
1.Sting的值一般存放在堆中或者常量池中
String str0=new String("ABC");//开辟新空间,存放在堆中 String str1="ABC";//存放在常量池中
当添加字符时,需要开辟新空间。效率低下。
注意:常量池中的另当别论。和在堆中的以及StringBuffer和StringBuilder都不同。
2.StringBuffer和StringBuilder拥有缓冲区,添加或更改字符时不再需要开辟新空间,其缓冲区为动态增长。效率较高
StringBuilder sb1=new StringBuilder("AB"); sb1.append("C"); StringBuffer sb2=new StringBuffer("AB"); sb2.append("C");
二、区别
1.String的一个特殊情况,编译器的优化导致指向常量池
2.如果字符串要进行值的比较最好使用equals方法
3.StringBuffer的创建
StringBuffer sb0=new StringBuffer("AB"); sb0.append("C");
4.StringBuilder的创建
StringBuilder sb=new StringBuilder("AB"); sb.append("C");
5..StringBuffer与StringBuilder的append方法部分源码分析
//StringBuffer的append方法源码 @Override public synchronized StringBuffer append(String str) {//synchronized(同步锁)修饰方法就是线程安全的
toStringCache = null; super.append(str); return this; } //StringBuilder的append方法源码 @Override public StringBuilder append(String str) { super.append(str); return this; }
(1)synchronized(同步锁)修饰方法就是线程安全的。
(2)StringBuffer是线程安全的,StringBuilder线程不安全的。
(3)StringBuilder效率比StringBuffer更高,因为它是线程不安全。注意在实际的开发过程中使用StringBuilder的频率也会比StringBuffer高。
6.三者选择情况使用
当出现频繁的对字符串进行修改、添加、删除时。StringBuffer或StringBuilder。
总结效率高低:StringBuilder > StringBuffer > String
String、StringBuffer、StringBuilder的区别——Java面向对象基础(24)
原文:https://www.cnblogs.com/Unlimited-Rain/p/12535398.html