String字符串拼接小例
生活随笔
收集整理的這篇文章主要介紹了
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字符串拼接小例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux进阶之路————scp指令介绍
- 下一篇: law是什么的缩写_Lawyer和Att