C#知識點之到底創建了幾個string對象?

面試官:string[] str1 = new string[1]{“abc”};創建了幾個對象?
面試官:string str2 = “a” + “b” + “d”; 創建了幾個對象?
面試官:str2 = “abc”; 創建了幾個對象?

先來看第一個string[] str1 = new string[1]{“abc”};創建了幾個對象?

答案:1個或2個。
分析:第一個,先查找常量池中是否有“abc”,如果沒有,則在常量池中創建一個“abc”對象,如果有,則不創建。
第二個,new 本身就要在堆中開闢一塊內存,創建一個“abc”對象實例。並返還地址給棧中的str。
看圖比較容易理解。也方便後面兩個問題的分析。
在這裏插入圖片描述

第二個問題string str2 = “a” + “b” + “d”; 創建了幾個對象?

答案:1個。
分析:首先沒有new。堆中創建對象0個。
那麼按照第一個問題的推理,“a”,“b”,"d"三個在常量池中都沒有,應該至少創建3個啊?
這裏有一個小知識點,這樣的代碼,在編譯時就已經把abc這三個常量拼在一起了,所以只在常量池中創建了一個“abd”的對象。
在這裏插入圖片描述

第三個問題str2 = “abc”; 創建了幾個對象?創建了幾個對象?

答案:0個。
分析:因爲常量池中已有,直接返回內存地址。str2修改引用。
在這裏插入圖片描述

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