java string与stringBuffer的区别是什么



java string与stringBuffer的区别是什么。string与stringBuffer实例代码介绍。java String是一个final Class, StringBuffer不是。对于 String a = “yacht” ,String b = “yacht1″ String c = a + b ; 存在一个对象拷贝构造以及解析的消耗问题。

对StringBuffer来说,

StringBuffer sb = new StringBuffer();

sb.append(“yacht”) ;

sb.append(“yacht1″);

StringBuffer是可实例化的类,而且它的里面机制是维护了一个capacity大小的字符数组,因此StringBuffer的append操作避免了对象的消耗问题,如果是String连接字符串这种事情,StringBuffer会好很多。然而事情真的是那样的吗?看下面代码

String a = “yacht1″ + “yacht2″ + “yacht3″ + “yacht4″;
StringBuffer sb = new StringBuffer(); sb.append(“yacht1″) ; sb.append(“yacht2″); sb.append(“yacht3″) ; sb.append(“yacht4″); String a = sb.toString();
假如真的如上面所说的话,红色的效率肯定比蓝色的低,但事实不是这样的,那为什么呢?此时需了解程序过程的两个时期,一个是编译时,一个是运行时。在编译的时候,编译器会对程序进行优化,因此红色的String a会被优化成yacht1yacht2yacht3yacht4,但蓝色的StringBuffer只会在运行的时候才处理。因此效率是不一样的。
假如代码如下的话:
String a ; for(int i = 0; i< 100000;i++){ a += String.valueOf(i) ;}
StringBuffer sb = new StringBuffer(); for(int i = 0; i< 100000;i++){ sb.append(i) ;} String a = sb.toString();
红色的效率就大大不如蓝色,区别是什么?原因就在于运行时和编译时的优化问题上!