String的兩種初始化方法講解
前言:String的創(chuàng)建和初始化有兩種方法,既可以用String str = new String("abc")創(chuàng)建一個字符串,也可以用String str = "abc"的形式創(chuàng)建。
1: String str = "abc"創(chuàng)建一個字符串的過程
- 首先在常量池(方法區(qū))中查找是否存在內(nèi)容為"abc"的字符串對象
- 如果不存在則在常量池中創(chuàng)建一個"abc"的字符串對象,并讓str引用該對象
- 如果存在則直接讓str引用該對象
2: String str = new String("abc")創(chuàng)建一個字符串的過程
- 首先定義一個str的String類型的引用并存放在棧中
- 在字符串常量池中查看是否存在內(nèi)容為"abc"字符串對象
- 若存在則跳過這個步驟,若不存在,則在字符串常量池中創(chuàng)建一個內(nèi)容為"abc"的字符串對象。(前三步都是在編譯時完成的)
- 執(zhí)行new操作,在堆中創(chuàng)建一個指定的對象"abc",這里堆的對象是字符串常量池“abc”對象的一個拷貝對象。
- 讓str指向堆中“abc”這個對象(也就是存儲這個對象的在堆中的地址)
有時會問 String str = new String("abc")
創(chuàng)建一個字符串的過程會創(chuàng)建幾個對象?
答:一個或兩個(因為編譯時會檢查方法區(qū)常量池中是否已經(jīng)存在需要創(chuàng)建的字符串對象。若存在直接將引用指向常量池的對象,此時只會在隨后的運行時堆中創(chuàng)建一個對象。而如果不存在,會先在常量池中創(chuàng)建一個對象,在隨后的運行時還會在堆中再創(chuàng)建一個對象,所以此時會創(chuàng)建兩個對象)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
IntelliJ IDEA中SpringBoot項目通過devtools實現(xiàn)熱部署的方法
這篇文章主要介紹了IntelliJ IDEA中SpringBoot項目通過devtools實現(xiàn)熱部署的方法,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-08-08Spring @RestController注解組合實現(xiàn)方法解析
這篇文章主要介紹了Spring @RestController注解組合實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06Spring Boot利用@Async異步調(diào)用:ThreadPoolTaskScheduler線程池的優(yōu)雅關(guān)閉詳解
這篇文章主要給大家介紹了關(guān)于Spring Boot利用@Async異步調(diào)用:ThreadPoolTaskScheduler線程池的優(yōu)雅關(guān)閉的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-05-05SpringBoot實現(xiàn)數(shù)據(jù)加密脫敏的示例代碼
這篇文章主要為大家學習介紹了SpringBoot如何利用注解+反射+AOP實現(xiàn)數(shù)據(jù)加密脫敏的功能,文中的示例代碼講解詳細,需要的可以參考一下2023-08-08使用IntelliJ IDEA查看類的繼承關(guān)系圖形(圖文詳解)
這篇文章主要介紹了使用IntelliJ IDEA查看類的繼承關(guān)系圖形,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的工作或?qū)W習具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03