五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網 會員登陸 & 注冊

Java基礎-String

2023-04-14 20:27 作者:明厚-H  | 我要投稿

String對象

常量池

String 對象的兩種創(chuàng)建方式:

String str1 = "abcd";//先檢查字符串常量池中有沒有"abcd",如果字符串常量池中沒有,則創(chuàng)建一個,然后 str1 指向字符串常量池中的對象,如果有,則直接將 str1 指向"abcd""; String str2 = new String("abcd");//堆中創(chuàng)建一個新的對象 String str3 = new String("abcd");//堆中創(chuàng)建一個新的對象 System.out.println(str1==str2);//false System.out.println(str2==str3);//falseCopy to clipboardErrorCopied

這兩種不同的創(chuàng)建方法是有差別的。

  • 第一種方式是在常量池中拿對象;

  • 第二種方式是直接在堆內存空間創(chuàng)建一個新的對象。

記住一點:只要使用 new 方法,便需要創(chuàng)建新的對象。

再給大家一個圖應該更容易理解,圖片來源:https://www.journaldev.com/797/what-is-java-string-pool:

String 類型的常量池比較特殊。它的主要使用方法有兩種:

  • 直接使用雙引號聲明出來的 String 對象會直接存儲在常量池中。

  • 如果不是用雙引號聲明的 String 對象,可以使用 String 提供的 intern 方法。String.intern() 是一個 Native 方法,它的作用是:如果運行時常量池中已經包含一個等于此 String 對象內容的字符串,則返回常量池中該字符串的引用;如果沒有,JDK1.7之前(不包含1.7)的處理方式是在常量池中創(chuàng)建與此 String 內容相同的字符串,并返回常量池中創(chuàng)建的字符串的引用,JDK1.7以及之后的處理方式是在常量池中記錄此字符串的引用,并返回該引用。

? ? ? ? ?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 對象Copy to clipboardErrorCopied

字符串拼接:

? ? ? ? ?String str1 = "str"; ? ? ? ? ?String str2 = "ing"; ? ? ? ? ?String str3 = "str" + "ing";//常量池中的對象 ? ? ? ? ?String str4 = str1 + str2; //在堆上創(chuàng)建的新的對象 ? ? ? ? ?String str5 = "string";//常量池中的對象 ? ? ? ? ?System.out.println(str3 == str4);//false ? ? ? ? ?System.out.println(str3 == str5);//true ? ? ? ? ?System.out.println(str4 == str5);//falseCopy to clipboardErrorCopied

盡量避免多個字符串拼接,因為這樣會重新創(chuàng)建對象。如果需要改變字符串的話,可以使用 StringBuilder 或者 StringBuffer。

new String("test"); 創(chuàng)建幾個對象?

. 將創(chuàng)建 1 或 2 個字符串。如果池中已存在字符串常量“abc”,則只會在堆空間創(chuàng)建一個字符串常量“abc”。如果池中沒有字符串常量“abc”,那么它將首先在池中創(chuàng)建,然后在堆空間中創(chuàng)建,因此將創(chuàng)建總共 2 個字符串對象。

驗證:

? ? ? ?String s1 = new String("abc");// 堆內存的地址值 ? ? ? ?String s2 = "abc"; ? ? ? ?System.out.println(s1 == s2);// 輸出 false,因為一個是堆內存,一個是常量池的內存,故兩者是不同的。 ? ? ? ?System.out.println(s1.equals(s2));// 輸出 trueCopy to clipboardErrorCopied

結果:


Java基礎-String的評論 (共 條)

分享到微博請遵守國家法律
达孜县| 红安县| 获嘉县| 班玛县| 海原县| 鄂托克前旗| 石渠县| 辰溪县| 葫芦岛市| 忻州市| 恭城| 桂平市| 宁化县| 德惠市| 科尔| 邵阳县| 七台河市| 桐城市| 霍邱县| 青浦区| 临江市| 乐都县| 兖州市| 山东省| 泰和县| 靖江市| 兴隆县| 长沙县| 巴南区| 绥阳县| 多伦县| 茶陵县| 怀集县| 军事| 宝丰县| 科技| 哈巴河县| 铁力市| 临潭县| 平泉县| 乌恰县|