String a="123"創建對象個數問題

String類型對象創建個數,我總結爲一下幾種情況(均不考慮字符串在常量池中已存在的情況):

1 String a="123";

創建了1個對象

jvm在編譯階段會判斷常量池中是否有 "123" 這個常量對象如果有,a直接指向這個常量的引用,如果沒有會在常量池裏創建這個常量對象。

 String a=new String("123");

創建了2個對象

同情況1,jvm編譯階段判斷常量池中 "123"存在與否,進而來判斷是否創建常量對象,然後運行階段通過new關鍵字在java heap創建String對象。

3 String a="123"+"456";

創建了1個對象

jvm編譯階段過編譯器優化後會把字符串常量直接合併成"123456",所有創建對象時最多會在常量池中創建1個對象。

4 String a="123"+new String("456");

創建了4個對象

常量池對象"123" ,"456",new String("456")創建堆對象,還有一個堆對象"123456"。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章