String s = new String('a ') 到底產(chǎn)生幾個對象
老生常談的一個梗,到2020了還在爭論,你們一天天的,哎哎哎,我不是針對你一個,我是說在座的各位都是人才!
上圖紅色的這3個箭頭,對于通過new
產(chǎn)生一個字符串(”宜春”)時,會先去常量池中查找是否已經(jīng)有了”宜春”對象,如果沒有則在常量池中創(chuàng)建一個此字符串對象,然后堆中再創(chuàng)建一個常量池中此”宜春”對象的拷貝對象。
也就是說準確答案是產(chǎn)生了一個或兩個對象,如果常量池中原來沒有 ”宜春” ,就是兩個。反之就是一個。
是的!如果面試官問到,回答一個或兩個即可,但是…畢竟…畢竟
畢竟我和各位都是人才,java知識底蘊不能如此短淺,這題還沒謝幕我們還能對面試官多嗶嗶幾句:字符串常量池在不同版本的jvm中可能位置不同
那么String s=new String("a"+"b");創(chuàng)建了幾次對象?
當jvm 看到 "a","b"時候 各創(chuàng)建了一次對象,"a"+"b"又創(chuàng)建了一個新的串,新的對象 ,new 創(chuàng)建了一個對象在堆,所以一共創(chuàng)建四次對象.
String a="sss";
這是之前我的理解 不知道對不對 大家看看評論第二條,是另一種理解。如果我們是為了應付面試可以兩者結(jié)合來說,如果自己鉆研 還是動手多操作看看 ~~在不同的jdk版本可能有不同的結(jié)果
例子:a="bbb";
String 不是不可變對象嗎 ?是怎么賦值的呢?
String 是不可變對象,當jvm看到"sss"時把引用賦給a,當 jvm看到"bbb"的時候,又創(chuàng)建了新的對象 ,把新的引用返回給a,而原來的"sss"還是不變的.
到此這篇關于String s = new String(" a ") 到底產(chǎn)生幾個對象的文章就介紹到這了,更多相關String s = new String(" a ")內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring Cache優(yōu)化數(shù)據(jù)庫訪問的項目實踐
本文主要介紹了Spring Cache優(yōu)化數(shù)據(jù)庫訪問的項目實踐,將創(chuàng)建一個簡單的圖書管理應用作為示例,并演示如何通過緩存減少對數(shù)據(jù)庫的頻繁查詢,感興趣的可以了解一下2024-01-01SpringBoot @ControllerAdvice 攔截異常并統(tǒng)一處理
這篇文章主要介紹了SpringBoot @ControllerAdvice 攔截異常并統(tǒng)一處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09深入理解Java8新特性之Stream API的終止操作步驟
Stream是Java8的一大亮點,是對容器對象功能的增強,它專注于對容器對象進行各種非常便利、高效的 聚合操作(aggregate operation)或者大批量數(shù)據(jù)操作。Stream API借助于同樣新出現(xiàn)的Lambda表達式,極大的提高編程效率和程序可讀性,感興趣的朋友快來看看吧2021-11-11如何解決線程太多導致java socket連接池出現(xiàn)的問題
這篇文章主要介紹了如何解決線程太多導致socket連接池出現(xiàn)的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12springboot?整合?clickhouse的實現(xiàn)示例
本文主要介紹了springboot?整合?clickhouse的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02