首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

关于String联接(+运算符)

2012-12-28 
关于String连接(+运算符)1.代码?记得刚学java的时候,如上代码中的s+i应该用StringBuilder的append方法来

关于String连接(+运算符)

1.代码

?记得刚学java的时候,如上代码中的s+=i;应该用StringBuilder的append方法来完成,从而避免生成很多String对象,

而在jdk1.6中,s+=i;这种代码会自动被编译器优化,通过反编译代码,可的到如下结果

Compiled from "StringTest.java"public class lan.jdk.study.StringTest extends java.lang.Object{public lan.jdk.study.StringTest();  Code:   0:   aload_0   1:   invokespecial   #11; //Method java/lang/Object."<init>":()V   4:   returnpublic static void main(java.lang.String[]);  Code:   0:   ldc     #19; //String   2:   astore_1   3:   iconst_1   4:   istore_2   5:   goto    30   8:   new     #21; //class java/lang/StringBuilder   11:  dup   12:  aload_1   13:  invokestatic    #23; //Method java/lang/String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;   16:  invokespecial   #29; //Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V   19:  iload_2   20:  invokevirtual   #32; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;   23:  invokevirtual   #36; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;   26:  astore_1   27:  iinc    2, 1   30:  iload_2   31:  ldc     #40; //int 1000000   33:  if_icmplt       8   36:  returnpublic java.lang.String toString();  Code:   0:   new     #21; //class java/lang/StringBuilder   3:   dup   4:   ldc     #47; //String StringTest [name=   6:   invokespecial   #29; //Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V   9:   aload_0   10:  getfield        #49; //Field name:Ljava/lang/String;   13:  invokevirtual   #51; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;   16:  ldc     #54; //String , address=   18:  invokevirtual   #51; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;   21:  aload_0   22:  getfield        #56; //Field address:Ljava/lang/String;   25:  invokevirtual   #51; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;   28:  ldc     #58; //String ]   30:  invokevirtual   #51; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;   33:  invokevirtual   #36; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;   36:  areturn}

?可以看jdk会自动优化String相加的代码,因此代码中直接用+操作连接字符串即可,以增加代码可读性。

热点排行