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

資訊專欄INFORMATION COLUMN

java中的String為什么是不可變的

cfanr / 806人閱讀

摘要:什么是不可變對象如果一個(gè)對象,在它創(chuàng)建完成后,不能在改變它的狀態(tài),那么這個(gè)對象就是不可變的。而在中,是封裝的數(shù)組,是在這個(gè)數(shù)組中的起始位置,是所占的字符的個(gè)數(shù)。

這是之前在網(wǎng)上看到的一個(gè)問題,我就是總結(jié)一下。
什么是不可變對象:
如果一個(gè)對象,在它創(chuàng)建完成后,不能在改變它的狀態(tài),那么這個(gè)對象就是不可變的。不能改變這個(gè)對象的狀態(tài)就是:不改變對象內(nèi)的成員變量,包括基本數(shù)據(jù)類型的值不能改變,引用類型的變量不能指向其他的對象,引用類型指向的對象的狀態(tài)也不能改變。

String類是一個(gè)final類,是不能被繼承的

區(qū)分對象和對象的引用

public class Person {
    public static void main(String[] args) {
        String s = "abcd";

        System.out.println("s = "+s);
        s = "123456";

        System.out.println("s = "+s);
    }


}

這里的s看上去被改變了,但是s卻是String對象的引用,它指向了一個(gè)具體的對象,而s的改變其實(shí)就是它所指向的對象發(fā)生了改變。

private final char value[];

//String是將輸入的字符串封裝為字符數(shù)組value[]就是這個(gè)數(shù)組的長度

private int hash;

//是對象的哈西值的緩存

以上是JDK 1.7中的String源代碼,由以上代碼可以看出
String其實(shí)就是對字符數(shù)組的封裝,在java中數(shù)組也是對象,value也只是一個(gè)引用,它指向了一個(gè)真正的數(shù)組對象。而在JDK 1.6中, value是String封裝的數(shù)組,offset是String在這個(gè)value數(shù)組中的起始位置,count是String所占的字符的個(gè)數(shù)。也可以得出這個(gè)結(jié)論的

并且我們發(fā)現(xiàn)value,offset,count都是private final,并且類中也沒有提供get()和set()方法。這點(diǎn)也可以看出String是無法修改的.

謝謝:http://www.importnew.com/16817.html提供的文章

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

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

相關(guān)文章

  • StringString類型什么可變

    摘要:性能當(dāng)字符串是不可變時(shí),字符串常量池才有意義。字符串常量池的出現(xiàn),可以減少創(chuàng)建相同字面量的字符串,讓不同的引用指向池中同一個(gè)字符串,為運(yùn)行時(shí)節(jié)約很多的堆內(nèi)存。 在學(xué)習(xí)Java的過程中,我們會(huì)被告知 String 被設(shè)計(jì)成不可變的類型。為什么 String 會(huì)被 Java 開發(fā)者有如此特殊的對待?他們的設(shè)計(jì)意圖和設(shè)計(jì)理念到底是什么?因此,我?guī)е韵氯齻€(gè)問題,對 String 進(jìn)行剖析: ...

    zhiwei 評論0 收藏0
  • Java String是不可變嗎?

    摘要:我們都知道中的類的設(shè)計(jì)是不可變的,來看下類的源碼。其值也就是對字符數(shù)組的封裝,即,其值被定義成的,說明不能通過外界修改,即不可變。真的不可變嗎來看下面這個(gè)例子。所以說,這里的字符串并不是可變,只是變更了字符串引用。 我們都知道 Java 中的 String 類的設(shè)計(jì)是不可變的,來看下 String 類的源碼。 public final class String implemen...

    April 評論0 收藏0
  • JavaString可變

    摘要:但是通過構(gòu)造函數(shù)的并不是。通過構(gòu)造函數(shù)創(chuàng)建的變量在機(jī)制上與其他對象一致,都是在上創(chuàng)建新的對象,然后把引用賦給變量。此外,的方法和等方法實(shí)現(xiàn)均是調(diào)用了構(gòu)造函數(shù)創(chuàng)建了新的對象,所以他們返回的也都是存在于上的新對象。 String經(jīng)常在一個(gè)語言中或多或少都有些特殊地位。在Java亦不例外。今天先來討論,String是不可變的。 String是引用類型,String變量儲(chǔ)存一個(gè)地址,地址指向內(nèi)...

    atinosun 評論0 收藏0
  • 第3章:抽象數(shù)據(jù)類型(ADT)和面向?qū)ο缶幊蹋∣OP) 3.1數(shù)據(jù)類型和類型檢查

    摘要:所有變量的類型在編譯時(shí)已知在程序運(yùn)行之前,因此編譯器也可以推導(dǎo)出所有表達(dá)式的類型。像變量的類型一樣,這些聲明是重要的文檔,對代碼讀者很有用,并由編譯器進(jìn)行靜態(tài)檢查。對象類型的值對象類型的值是由其類型標(biāo)記的圓。 大綱 1.編程語言中的數(shù)據(jù)類型2.靜態(tài)與動(dòng)態(tài)數(shù)據(jù)類型3.類型檢查4.易變性和不變性5.快照圖6.復(fù)雜的數(shù)據(jù)類型:數(shù)組和集合7.有用的不可變類型8.空引用9.總結(jié) 編程語言中的數(shù)據(jù)...

    zhangqh 評論0 收藏0
  • 最最最常見Java面試題總結(jié)——第二周

    摘要:與都繼承自類,在中也是使用字符數(shù)組保存字符串,,這兩種對象都是可變的。采用字節(jié)碼的好處語言通過字節(jié)碼的方式,在一定程度上解決了傳統(tǒng)解釋型語言執(zhí)行效率低的問題,同時(shí)又保留了解釋型語言可移植的特點(diǎn)。 String和StringBuffer、StringBuilder的區(qū)別是什么?String為什么是不可變的? String和StringBuffer、StringBuilder的區(qū)別 可變性...

    yearsj 評論0 收藏0

發(fā)表評論

0條評論

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