企业建设网站的重要性,深圳市网站开发公司,郑州市公司网站开发设计,贵州三线建设博物馆网站转载自 java提高篇之字符串对于字符串而言我们经常是要对其进行拼装处理的#xff0c;在java中提高了三种拼装的方法#xff1a;、concat()以及append()方法。这三者之间存在什么区别呢#xff1f;先看如下示例#xff1a;
public class StringTest {/*** desc 使用、conca…转载自 java提高篇之字符串对于字符串而言我们经常是要对其进行拼装处理的在java中提高了三种拼装的方法、concat()以及append()方法。这三者之间存在什么区别呢先看如下示例
public class StringTest {/*** desc 使用、concat()、append()方法循环10W次* author chenssy* data 2013-11-16* param args* return void*/public static void main(String[] args) {//long start_01 System.currentTimeMillis();String a a;for(int i 0 ; i 100000 ; i){a b;}long end_01 System.currentTimeMillis();System.out.println( 所消耗的时间 (end_01 - start_01) 毫米);//concat()long start_02 System.currentTimeMillis();String c c;for(int i 0 ; i 100000 ; i){c c.concat(d);}long end_02 System.currentTimeMillis();System.out.println(concat所消耗的时间 (end_02 - start_02) 毫米);//appendlong start_03 System.currentTimeMillis();StringBuffer e new StringBuffer(e);for(int i 0 ; i 100000 ; i){e.append(d);}long end_03 System.currentTimeMillis();System.out.println(append所消耗的时间 (end_03 - start_03) 毫米);}
}
Output:所消耗的时间19080毫米concat所消耗的时间9089毫米append所消耗的时间10毫米从上面的运行结果可以看出append()速度最快concat()次之最慢。原因请看下面分解:
1方式拼接字符串
在前面我们知道编译器对进行了优化它是使用StringBuilder的append()方法来进行处理的我们知道StringBuilder的速度比StringBuffer的速度更加快但是为何运行速度还是那样呢主要是因为编译器使用append()方法追加后要同toString()转换成String字符串也就说 str ”b”等同于
str new StringBuilder(str).append(“b”).toString();
它变慢的关键原因就在于new StringBuilder()和toString()这里可是创建了10W个StringBuilder对象而且每次还需要将其转换成String速度能不慢么
2concat()方法拼接字符串
public String concat(String str) {int otherLen str.length();if (otherLen 0) {return this;}char buf[] new char[count otherLen];getChars(0, count, buf, 0);str.getChars(0, otherLen, buf, count);return new String(0, count otherLen, buf);}这是concat()的源码它看上去就是一个数字拷贝形式我们知道数组的处理速度是非常快的但是由于该方法最后是这样的return new String(0, count otherLen, buf);这同样也创建了10W个字符串对象这是它变慢的根本原因。
3append()方法拼接字符串
public synchronized StringBuffer append(String str) {super.append(str);return this;}StringBuffer的append()方法是直接使用父类AbstractStringBuilder的append()方法该方法的源码如下
public AbstractStringBuilder append(String str) {if (str null) str null;int len str.length();if (len 0) return this;int newCount count len;if (newCount value.length)expandCapacity(newCount);str.getChars(0, len, value, count);count newCount;return this;}与concat()方法相似它也是进行字符数组处理的加长然后拷贝但是请注意它最后是返回并没有返回一个新串而是返回本身也就说这这个10W次的循环过程中它并没有产生新的字符串对象。
通过上面的分析我们需要在合适的场所选择合适的字符串拼接方式但是并不一定就要选择append()和concat()方法原因在于根据符合我们的编程习惯只有到了使用append()和concat()方法确实是可以对我们系统的效率起到比较大的帮助才会考虑同时鄙人也真的没有怎么用过concat()方法。