LZ说的问题实际是String、StringBuffer、StringBuilder三者的区别问题。
String是JDK1.0就有的类;StringBuffer也是JDK1.0;StringBuilder则是JDK1.5才有的。相信楼主已经知道String与StringBuffer的区别,一个是长度不可变的,一个是长度可变的。现在的问题是StringBuilder也是长度可变的,与StringBuffer区别是什么?StringBuffer是线程安全的,所谓线程安全就是多个线程(涉及多线程)访问同一个变量,会不会出现数据不同步的情况,比如一个线程准备读数据,而另一个线程却正在对此数据进行修改,导致第一个数据出现“脏读”,此时就会出现麻烦,这时就需要通过同步信号量(操作系统中进程同步)进行控制,不过在Java中同步方法由synchronized修饰,保证了多个线程只能由一个线程对数据进行操作,其他线程处于等待状态,实现数据同步。当然这是需要额外的空间和进程进行保证的,所以导致StringBuffer会比较慢。StringBuilder则是线程不安全的,当单线程操作时,不会出现任何问题;但是当多个线程同时访问时,就会出现“脏读”问题,它的优点就是快,因为少了相应的信号量的处理。
以上为原理部分,StringBuffer和StringBuilder方法确实一样,想知道到底使用哪个,就看您的使用环境如果是涉及到多线程访问,毫无疑问使用StringBuffer,可保证数据同步;如果是单线程访问,优先用StringBuilder速度快。
LZ可以查看String/StringBuffer/StringBuildr源码http://www.cnblogs.com/jobscn/archive/2011/11/13/2246438.html |