new String("aaa")和“aaa”的區別

方式一:String a = “aaa” ;

方式二:String b = new String(“aaa”);

兩種方式都能創建字符串對象,但方式一要比方式二更優。
因爲字符串是保存在常量池中的,而通過new創建的對象會存放在內存中。

如果常量池中已經有字符串常量”aaa”

通過方式一創建對象,程序運行時會在常量池中查找”aaa”字符串,將找到的“aaa”字符串的地址賦給a

通過方式二創建對象,無論常量池中有沒有”aaa”字符串,程序都會在堆內存中開闢一片新空間存放新對象


如果常量池中沒有字符串常量”aaa”

通過方式一創建對象,程序運行時會將”aaa”字符串放進常量池,再將其地址賦給a。

通過方式二創建對象,程序會在堆內存中開闢一片新空間存放新對象同時會將”aaa”字符串放入常量池,相當於創建了兩個對象


測試:

public class StringNewTest {
    public static void main(String[] args) {
        String a = "aaa";
        String b = "aaa";
        String c = new String("aaa");
        System.out.println("a==b:"+(a == b));
        System.out.println("a==c:"+(a == c));
        System.out.println("a與b的值相等:"+(a.equals(c)));
    }
}

結果:
a==b:true
a==c:false
a與b的值相等:true

這裏==判斷的是地址

發佈了39 篇原創文章 · 獲贊 15 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章