Java-String字符串相加及拼接
字符串相加
String test1 = "test1" ;
String test2 = test1 + "test2" + "test3" ;
System.out.println(test2); //输出test1test2test3
在idea中使用加号,可以将两个字符串直接拼接,就如同上面代码一样,自动将两部分拼接,但是String对象长度是不可变的,所以为了做到这种相加拼接,就会创建一个StringBuilder对象进行字符串的拼接。
在cmd中使用javap -v 文件名.class 对字节码文件加载运行。
Code:
stack=2, locals=3, args_size=1
0: ldc #2 // String test1
2: astore_1
3: new #3 // class java/lang/StringBuilder
6: dup
7: invokespecial #4 // Method java/lang/StringBuilder."":()V
10: aload_1
11: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
14: ldc #6 // String test2test3
16: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
19: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
22: astore_2
23: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream;
26: aload_2
27: invokevirtual #9 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
30: return
可以看到第三行,new了一个StringBuilder对象,同时调用append()方法,用于字符串的拼接,再调用toString()方法转化为字符串,完成拼接操作。
效率较低
可以发现,如果使用过多的加号,就会占用大量资源,因为每次都需要创建多个StringBuilder对象,调用append()和toString()方法,同时还需要生成新的String对象接收。故效率较低。
concat()和append()
所以为了效率高的拼接,可以直接使用StringBuilder.append() 或 concat() 方法。
System.out.println(test1.concat("test4")); //输出test1test4
因为concat() 方法要求是两个String对象进行拼接,所以效率会很高。同时StringBuilder.append()是直接向原对象追加而不是新建对象,所以效率也高。