字串常數池:深入檢查
Java 中的字串常數池被池化以優化記憶體使用並提高效能。這表示當遇到字串文字時,編譯器會檢查字串常數池中是否存在具有相同值的現有字串物件。如果找到,引用將定向到現有對象,避免建立新對象。
但是,當使用「new」運算子建立新的 String 物件時,會出現混亂,因為這似乎與規則相矛盾實習的。為了澄清這一點,讓我們檢查以下語句:
這些語句表明,當String 文字被保留並儲存在池中時,使用「new」會強制JVM 建立一個新的String 物件。這意味著,儘管池中存在等效的 String,「new」運算子會繞過它並在非池記憶體中分配一個新物件。
為了說明這一點,請考慮以下範例:
String one = new String("test"); String two = "test"; System.out.println(one.equals(two)); // true System.out.println(one == two); // false
正如預期的那樣,“one”和“two”的值都是“test”,但“==”比較返回false,因為它們引用了不同的String 物件。這是因為使用“new”強制為“one”創建一個新的字串對象,即使字串文字“test”已經存在於池中。
總而言之,字串常數池優化內部字串文字的記憶體使用情況。但是,使用「new」會繞過池並在非池記憶體中建立一個新的 String 物件。這會產生兩個具有相同值但不同引用的不同 String 物件。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3