前言:string的創建和初始化有兩種方法,既可以用string str = new string("abc")創建一個字符串,也可以用string str = "abc"的形式創建。
1: string str = "abc"創建一個字符串的過程
- 首先在常量池(方法區)中查找是否存在內容為"abc"的字符串對象
- 如果不存在則在常量池中創建一個"abc"的字符串對象,并讓str引用該對象
- 如果存在則直接讓str引用該對象
2: string str = new string("abc")創建一個字符串的過程
- 首先定義一個str的string類型的引用并存放在棧中
- 在字符串常量池中查看是否存在內容為"abc"字符串對象
- 若存在則跳過這個步驟,若不存在,則在字符串常量池中創建一個內容為"abc"的字符串對象。(前三步都是在編譯時完成的)
- 執行new操作,在堆中創建一個指定的對象"abc",這里堆的對象是字符串常量池“abc”對象的一個拷貝對象。
- 讓str指向堆中“abc”這個對象(也就是存儲這個對象的在堆中的地址)
有時會問 string str = new string("abc")
創建一個字符串的過程會創建幾個對象?
答:一個或兩個(因為編譯時會檢查方法區常量池中是否已經存在需要創建的字符串對象。若存在直接將引用指向常量池的對象,此時只會在隨后的運行時堆中創建一個對象。而如果不存在,會先在常量池中創建一個對象,在隨后的運行時還會在堆中再創建一個對象,所以此時會創建兩個對象)
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
原文鏈接:https://blog.csdn.net/weixin_40581455/article/details/85223091