Java-String字符串相加及拼接
我的CSDN: https://blog.csdn.net/weixin_45910779/article/details/113663252
字符串相加
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."<init>":()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()是直接向原對象追加而不是新建對象,所以效率也高。