日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中字符串连接符(+)和append的区别

發布時間:2023/11/29 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中字符串连接符(+)和append的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考鏈接:https://www.jianshu.com/p/849f1d443b3a

文章結構:

  第一部分:對+的原理進行分析

  第二部分:+ 和 append 循環對比(貼出代碼,以及分別循環后的反編譯字節碼,來對兩者進行對比)

一: + 底層原理解析(+ 的底層是new StringBuilder 進行append)

1 String str1 = "hello"; 2 String str2 = str1 + " coisini"; 3 System.out.println(str2);

底層,其實在每一次 + 之前 都會new 一個StringBuilder對象,所以效率低,

上述代碼,會被編譯器按照如下順序執行

  (使用javap -c 命令查看指令集,參考文章:https://www.cnblogs.com/coisini/p/9779283.html)

具體指令詳解參考上一篇

https://www.cnblogs.com/coisini/p/9789412.html

二: + 和 append 循環對比?

  1):+ 號循環

1 long start = System.currentTimeMillis(); 2 String str1 = "hello"; 3 for(int i=0; i <10000000; i++){ 4 String str2 = str1 + " coisini"; 5 } 6 long end = System.currentTimeMillis(); 7 System.out.println("開始-結束時間差"+(end-start));

?

循環次數少,用 + 和append 結果沒差,為了對比結果,所以我循環次數多一點,這里沒考慮堆棧溢出的問題,看,用了2.34秒

看一下反編譯的字節碼

  2)append做循環

long start = System.currentTimeMillis(); String str1 = "hello"; StringBuilder builder= new StringBuilder(); for(int i=0; i <10000000; i++){builder.append("coisni"); } long end = System.currentTimeMillis(); System.out.println("開始-結束時間差"+(end-start));

?

反編譯字節碼,發現沒,根本沒有新創建對象

總結

?1): +的原理,每遇到一個+,就new StringBuilder然后用append

?2):性能,字符串拼接少,兩者均可,拼接次數多,用append

生怕自己少截個圖,會給閱讀者,閱讀造成麻煩,所以就啰嗦了點...

轉載于:https://www.cnblogs.com/coisini/p/9778892.html

總結

以上是生活随笔為你收集整理的Java中字符串连接符(+)和append的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。