Java : String類初始化時是否在常量池的一個容易混淆的點

String類在初始化的時候,會在常量池創建對象,這是之前對String類的概念,當然,這句話不完全正確,實際創建卻要複雜許多。

先看幾道題如下:

        String  a = "abc";
        String test1 = new String("a");
        System.out.println(a == test1);


        String b = "ab";
        String c ="c";
        String test2 = b+c;
        System.out.println(a == test2);
        
        String test3 = "ab"+"c";
        System.out.println(a == test3);

        final String d ="ab";
        String test4 = d+"c";
        System.out.println(a == test4);
        
        輸出結果爲:false ,false ,true,true

解析:
1.String a = “a” 或者String a = “b”+“c”;這種稱爲字符串常量,編譯時可確定,會在常量池中查找或者創建該對象

2.new String(“a”) : 將會在堆中創建該對象,而不是在常量池中創建

3.String a = str + “c” : 因爲存在編譯期不能確定的對象str,所以也是在堆中創建對象,而不是在常量池

4.final String aa = “a”:aa被final修飾之後,它的值在編譯期就能夠被確定,所以直接替換成“a”,而不是一個對象


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章