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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

String字符串拼接小例

發布時間:2025/3/12 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 String字符串拼接小例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?>>>寫出下面程序運行結果:

public class StringTest {public static void main(String[] args) {String s1 = "Programming";String a = "Program";String b = "ming";String s2 = "Program" + "ming";String s3 = a + b;System.out.println(s1 == s2);System.out.println(s1 == s3);System.out.println(s1 == s3.intern());} }

?>>>輸出結果為:

true false true

>>>解析:

首先,intern()方法會將常量池中對應字符串的引用返回,如果常量池沒有這個字符串,則將其添加到常量池,再返回常量池中的這個引用。所以第三個輸出結果為true。

關于第一和第二個輸出結果,可能迷惑性很大,這個我們需要借助于javap反編譯工具來看一下編譯過程:

執行 javap -c StringTest.class 命令,查看結果:

(如果圖片看不清,可以點擊圖片查看原圖)

圖中畫紅框的兩個部分,分別對應:

String s2 = "Program" + "ming"; String s3 = a + b;

可以看到,s2 通過字面量直接拼接的方式并沒有創建StringBuilder對象,但是s3卻創建了一個StringBuilder然后調用append()方法進行的字符串拼接。

因此,s2的地址在常量池中,s3的地址由于是new 了一個StringBuilder,因此是在堆(Heap)中,這才導致了 s1 == s3 的結果為 false。

所以,也并不是所有字符串拼接都是先創建一個StringBuilder對象的。這也會在面試題中經常被問到,即 “ 什么情況下用+運算符進行字符串連接比調用StringBuffer/StringBuilder對象的append方法連接字符串性能更好?”,就是在這種不會創建StringBuilder對象的情況下才會比append()性能好。

總結

以上是生活随笔為你收集整理的String字符串拼接小例的全部內容,希望文章能夠幫你解決所遇到的問題。

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