更新時間:2023年03月31日08時53分 來源:傳智教育 瀏覽次數(shù):
在Java中,這兩行代碼并不完全相同。
第一行代碼是使用字符串字面量創(chuàng)建字符串對象,而第二行代碼是使用字符串構造函數(shù)創(chuàng)建字符串對象。具體來說,第一行代碼創(chuàng)建了一個新的字符串對象,并將其賦值為“i”。而第二行代碼創(chuàng)建了一個新的字符串對象,其值也是“i”,但是它是通過使用字符串構造函數(shù)顯式創(chuàng)建的。
雖然這兩種方法都可以創(chuàng)建字符串對象,但是它們之間的一個重要區(qū)別是,當使用字符串字面量創(chuàng)建字符串對象時,Java編譯器會在內(nèi)存中創(chuàng)建一個字符串常量池,將所有相同的字符串共享在這個常量池中,從而提高了性能和內(nèi)存使用效率。而使用字符串構造函數(shù)創(chuàng)建字符串對象時,則沒有這種優(yōu)化。
以下是代碼演示:
String str1 = "i"; String str2 = new String("i"); System.out.println(str1 == str2); // false System.out.println(str1.equals(str2)); // true
在這個例子中,我們首先使用字符串字面量創(chuàng)建了一個字符串對象str1,然后使用字符串構造函數(shù)創(chuàng)建了另一個字符串對象str2。由于這兩個對象在內(nèi)存中的引用地址不同,所以str1 == str2的比較結果為false。但是,由于它們的值相同,所以str1.equals(str2)的比較結果為true。