氟塑料离心泵www.buybeng.com

jquery教程http://www.software8.co/wzjs/jquery/

在java中,字符串的加法是如何实现的?

当我查看String类的concat函数的源码时,发现字符串连接是这么实现的:
Java代码:
  1. public String concat(String str) {  
  2.     int otherLen = str.length();  
  3.     if (otherLen == 0) {  
  4.         return this;  
  5.     }  
  6.     int len = value.length;  
  7.     char buf[] = Arrays.copyOf(value, len + otherLen);  
  8.     str.getChars(buf, len);  
  9.     return new String(buf, true);  
  10. }  

那么,字符串的连接符(+)的实现和这个有什么区别呢?如果有区别的话,那它是如何实现的呢?

此外,这两者分别在什么场合使用,有没有性能上的差异。

 

为了回答这个问题,我们可以做一个测试。

 

首先,我们连接两个字符串
Java代码:
  1. String s1 = "foo";  
  2. String s2 = "bar";  
  3. String s3 = s1 + s2;  

 

下面我们将这个代码编译成class文件,然后再反编译(可以用JAD),我们得到反编译后的代码是:
Java代码:
  1. String s = "foo";  
  2. String s1 = "bar";  
  3. String s2 = (new StringBuilder()).append(s).append(s1).toString();  

所以,+ 和 concat 肯定是有区别的。

在性能上,从 concat() 源码可以看出,StringBuilder创建了更多的对象,而concat却没有,它使用的String类的内部实现。

综上,当我们需要连接两个字符串的时候,我们应当优先考虑使用 concat() 函数,当我们需要连接字符串和其它类型的变量时,再考虑使用+运算符

译者注:用 javap -c 查看java生成的字节码:
Java代码:
  1. java.lang.String cat(java.lang.String, java.lang.String);  
  2.   Code:  
  3.    0:   new     #2//class java/lang/StringBuilder  
  4.    3:   dup  
  5.    4:   invokespecial   #3//Method java/lang/StringBuilder."<init>":()V  
  6.    7:   aload_1  
  7.    8:   invokevirtual   #4//Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;  
  8.    11:  aload_2  
  9.    12:  invokevirtual   #4//Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;  
  10.    15:  invokevirtual   #5//Method java/lang/StringBuilder.toString:()Ljava/lang/    String;  
  11.    18:  astore_1  
  12.    19:  aload_1  
  13.    20:  areturn  
可以看出 a += b 其实等价于
原文来自站长网www.software8.co/
Java代码:
  1. a = new StringBuilder()  
  2.     .append(a)  
  3.     .append(b)  
  4.     .toString();  

posted on 2012-12-31 13:39 你爸是李刚 阅读(1510) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年12月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿

随笔档案

文章档案

技术网站

行业网站

搜索

最新评论

阅读排行榜

评论排行榜

站长网 氟塑料离心泵 注塑机 液晶广告机