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)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Java中的Vector和ArrayList區(qū)別及比較
這篇文章主要介紹了Java中的Vector和ArrayList區(qū)別及比較,本文從API、同步、數(shù)據(jù)增長、使用模式4個方面總結(jié)了它們之間的不同之處,需要的朋友可以參考下2015-03-03
SpringBoot實現(xiàn)動態(tài)數(shù)據(jù)源切換的方法總結(jié)
項目開發(fā)中經(jīng)常會遇到多數(shù)據(jù)源同時使用的場景,比如冷熱數(shù)據(jù)的查詢等情況,所以接下來本文就來介紹一下如何使用實現(xiàn)自定義注解的形式來實現(xiàn)動態(tài)數(shù)據(jù)源切換吧2023-12-12
Hibernate雙向多對多映射關(guān)系配置代碼實例
這篇文章主要介紹了Hibernate雙向多對多映射關(guān)系配置代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
Spring中Websocket身份驗證和授權(quán)的實現(xiàn)
在Web應(yīng)用開發(fā)中,安全一直是非常重要的一個方面,本文主要介紹了Spring中Websocket身份驗證和授權(quán)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-08-08

