成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

5.java String對象

Nosee / 1411人閱讀

摘要:使用構(gòu)造方法進(jìn)行類對象實(shí)例化,會開辟兩塊堆內(nèi)存空間,一塊是匿名對象所占,一塊是使用關(guān)鍵字創(chuàng)建的堆內(nèi)存。而且在賦值操作完成后,匿名對象所占的堆內(nèi)存空間將會變成垃圾空間。

String 類

字符串廣泛應(yīng)用 在Java 編程中,在 Java 中字符串屬于對象,Java 提供了 String 類來創(chuàng)建和操作字符串。

實(shí)例化String類

實(shí)例化一個(gè)String類有兩種方法:

直接賦值
String str = "hello world";
利用構(gòu)造方法

示例:

String str = new String("hello world");
兩種實(shí)例化方式的區(qū)別

字符串常量實(shí)際上是String的匿名對象。這里"hello world"就是一個(gè)String的匿名對象。因此"hello world" 可以直接調(diào)用String類的方法和屬性。

因此所謂的直接賦值實(shí)際上是給一個(gè)匿名對象設(shè)置了名字而已,匿名對象由系統(tǒng)自動(dòng)生成,不再有用戶使用new創(chuàng)建。

使用構(gòu)造方法進(jìn)行String類對象實(shí)例化,會開辟兩塊堆內(nèi)存空間,一塊是"hello world"匿名對象所占,一塊是使用new關(guān)鍵字創(chuàng)建的堆內(nèi)存。

而且在賦值操作完成后,"hello world"匿名對象所占的堆內(nèi)存空間將會變成垃圾空間。

因此直接賦值將會比使用構(gòu)造方法的方式節(jié)省一塊堆內(nèi)存空間。而且使用構(gòu)造方法定義的String對象,也不會保存在對象池中。

使用new一定會開辟新的堆內(nèi)存空間。

如果希望新開辟的String類內(nèi)存數(shù)據(jù)保存進(jìn)對象池,可以使用String類的intern()方法。

因此這兩種實(shí)例化的區(qū)別總結(jié)如下:

直接賦值:只會開辟一塊堆內(nèi)存空間,并且會自動(dòng)保存在對象池之中,以供下次再次使用。

構(gòu)造方法:會開辟兩塊堆內(nèi)存空間,其中匿名對象所占的空間會成為垃圾空間,并且不會自動(dòng)入池,但是用戶可以使用intern手工入池。

示例:

public class StringDemo{
    public static void main(String args[]) {
        String stra = "hello";
        String strb = "hello";
        String strc = "hello";
        String strd = new String("hello");//一旦使用new,一定會分配新的堆內(nèi)存。
        String stre = new String("hello").intern();//使用intern手工入池。
        System.out.println(stra == strb);
        System.out.println(stra == strc);
        System.out.println(strc == strb);
        System.out.println(stra == strd);
        System.out.println(stra == stre);
    }
}

輸出結(jié)果:
true
true
true
false
true
String 方法

參考:https://docs.oracle.com/javas...

String “==” 與 “equals()”的區(qū)別

== 是java提供的關(guān)系運(yùn)算符,主要的功能是判斷數(shù)值是否相同,如果用在String對象上,比較的是兩個(gè)String對象所指向的堆內(nèi)存地址是否一樣。

equals()是由String提供的一個(gè)方法,判斷兩個(gè)String對象的內(nèi)容是否相同。

示例:

public class StringDemo{
    public static void main(String args[]) {
        String stra = "hello";
        String strb = new String("hello");
        String strc = strb;

        System.out.println(stra == strb);
        System.out.println(stra == strc);
        System.out.println(strc == strb);
        System.out.println(stra.equals(strb));
    }
}

輸出結(jié)果:
false
false
true
true
String對象內(nèi)容不可改變

String對象的內(nèi)容不能改變,而對于String變量內(nèi)容的變化,是利用了引用關(guān)系的變化而實(shí)現(xiàn)的。每一次的變化都會使得String變量指向的堆內(nèi)存空間改變,而且原先的堆內(nèi)存空間將會變成垃圾空間。

示例:

public class StringDemo{
    public static void main(String args[]) {
        String str = "hello ";
        //使用identityHashCode獲取根據(jù)對象內(nèi)存地址計(jì)算出來的哈希碼,不同的地址算出來的結(jié)果是不一樣的。
        System.out.println(System.identityHashCode(str));
        str = str + "world ";
        System.out.println(System.identityHashCode(str));
        str += "!!!";
        System.out.println(System.identityHashCode(str));
        System.out.println(str);
    }
}

輸出結(jié)果:
366712642
1829164700
2018699554
hello world !!!
String類特點(diǎn)總結(jié)

String對象有兩種實(shí)例化方式,使用直接賦值方式可以不產(chǎn)生垃圾空間,并且可以自動(dòng)入池。使用構(gòu)造方法會產(chǎn)生一塊垃圾空間,也不會自動(dòng)入池。

String對象一旦實(shí)例化,其內(nèi)容不可改變,String類對象內(nèi)容的改變是依靠引用關(guān)系的改變實(shí)現(xiàn)的。因此很多時(shí)候可以當(dāng)成基本數(shù)據(jù)類型來使用。

String對象的內(nèi)容相等判斷equals()方法完成,“==”實(shí)現(xiàn)的是內(nèi)存地址的判斷。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73498.html

相關(guān)文章

  • 5. Java 中的變量 【連載5

    摘要:變量中的類型變量中的類型分為三種靜態(tài)變量或者類變量實(shí)例變量局部變量靜態(tài)變量靜態(tài)變量也被稱為類變量,因?yàn)樗鼈兣c類相關(guān)聯(lián),并且對于類的所有實(shí)例對象都是通用的。局部變量是定義在一個(gè)類的函數(shù)里面,其作用范圍被限制在該函數(shù)內(nèi)部,外部無法訪問該變量。 1. 理解 Java 中的變量 程序中需要處理數(shù)據(jù),Java 中的變量是用來裝載數(shù)據(jù)。變量類似一個(gè)盒子,我們通過這個(gè)盒子,就可以操作盒子里面的數(shù)據(jù)。...

    myshell 評論0 收藏0
  • Java問題匯總,持續(xù)更新到GitHub

    摘要:目錄介紹問題匯總具體問題好消息博客筆記大匯總年月到至今,包括基礎(chǔ)及深入知識點(diǎn),技術(shù)博客,學(xué)習(xí)筆記等等,還包括平時(shí)開發(fā)中遇到的匯總,當(dāng)然也在工作之余收集了大量的面試題,長期更新維護(hù)并且修正,持續(xù)完善開源的文件是格式的同時(shí)也開源了生活博客,從年 目錄介紹 00.Java問題匯總 01.具體問題 好消息 博客筆記大匯總【16年3月到至今】,包括Java基礎(chǔ)及深入知識點(diǎn),Android技...

    beita 評論0 收藏0
  • 小馬哥Java面試題課程總結(jié)

    摘要:無限期等待另一個(gè)線程執(zhí)行特定操作。線程安全基本版請說明以及的區(qū)別值都不能為空數(shù)組結(jié)構(gòu)上,通過數(shù)組和鏈表實(shí)現(xiàn)。優(yōu)先考慮響應(yīng)中斷,而不是響應(yīng)鎖的普通獲取或重入獲取。只是在最后獲取鎖成功后再把當(dāng)前線程置為狀態(tài)然后再中斷線程。 前段時(shí)間在慕課網(wǎng)直播上聽小馬哥面試勸退(面試虐我千百遍,Java 并發(fā)真討厭),發(fā)現(xiàn)講得東西比自己拿到offer還要高興,于是自己在線下做了一點(diǎn)小筆記,供各位參考。 課...

    FingerLiu 評論0 收藏0
  • JVM 平臺上的各種語言的開發(fā)指南[z]

    摘要:我們的目標(biāo)是建立對每一種語言的認(rèn)識,它們是如何進(jìn)化的,未來將走向何方。有點(diǎn)的味道是堅(jiān)持使用動(dòng)態(tài)類型,但唯一還收到合理擁泵的編程語言,然而一些在企業(yè)的大型團(tuán)隊(duì)中工作的開發(fā)者擇認(rèn)為這會是的一個(gè)缺陷。 為什么我們需要如此多的JVM語言? 在2013年你可以有50中JVM語言的選擇來用于你的下一個(gè)項(xiàng)目。盡管你可以說出一大打的名字,你會準(zhǔn)備為你的下一個(gè)項(xiàng)目選擇一種新的JVM語言么? 如今借助來自...

    phodal 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<