String 類和常量池

2021-09-25 11:40:50 字數 1647 閱讀 8032

1:string 物件的兩種建立方式:

string str1 = "abcd";//先檢查字串常量池中有沒有"abcd",如果字串常量池中沒有,則建立乙個,然後 str1 指向字串常量池中的物件,如果有,則直接將 str1 指向"abcd"";

string str2 = new string("abcd");//堆中建立乙個新的物件

string str3 = new string("abcd");//堆中建立乙個新的物件

system.out.println(str1==str2);//false

system.out.println(str2==str3);//false

2:string 型別的常量池比較特殊

1、它的主要使用方法有兩種:

string s1 = new string("計算機");

string s2 = s1.intern();

string s3 = "計算機";

system.out.println(s2);//計算機

system.out.println(s1 == s2);//false,因為乙個是堆記憶體中的 string 物件乙個是常量池中的 string 物件,

system.out.println(s3 == s2);//true,因為兩個都是常量池中的 string 物件

3:字串拼接:

string str1 = "str";

string str2 = "ing";

string str3 = "str" + "ing";//常量池中的物件

string str4 = str1 + str2; //在堆上建立的新的物件

string str5 = "string";//常量池中的物件

system.out.println(str3 == str4);//false

system.out.println(str3 == str5);//true

system.out.println(str4 == str5);//false

盡量避免多個字串拼接,因為這樣會重新建立物件。如果需要改變字串的話,可以使用 stringbuilder 或者 stringbuffer。 

4:string s1 = new string("abc");這句話建立了幾個字串物件?

將建立 1 或 2 個字串。如果池中已存在字串文字「abc」,則池中只會建立乙個字串「s1」。如果池中沒有字串文字「abc」,那麼它將首先在池中建立,然後在堆空間中建立,因此將建立總共 2 個字串物件。

string s1 = new string("abc");// 堆記憶體的位址值

string s2 = "abc";

system.out.println(s1 == s2);// 輸出 false,因為乙個是堆記憶體,乙個是常量池的記憶體,故兩者是不同的。

system.out.println(s1.equals(s2));// 輸出 true

5:8 種基本型別的包裝類和常量池

String類和常量池

1.全域性字串常量池 string pool 全域性字串常量池中存放的內容是在類載入完成後存到string pool中的,在每個vm中只有乙份,存放的是字串常量的引用值 在堆中生成字串物件例項 2.class檔案常量池 class constant pool class常量池是在編譯的時候每個cla...

String類和常量池

string物件的兩種建立方式 string str1 abcd 先檢查字串常量池中有沒有 abcd 如果字串常量池中沒有,則建立乙個,然後 str1 指向字串常量池中的物件,如果有,則直接將 str1 指向 abcd string str2 new string abcd 堆中建立乙個新的物件 s...

String類和常量池

1 string物件建立物件的兩種方法 string str1 health 常量池中建立 strinng str2 new string health 堆中建立 system.out.println str1 str2 false2 string型別的常量池比較特殊 string a aaa 在常...