Java中的String類型

來源:互聯網
上載者:User

標籤:9.png   api   com   開始   str   沒有   col   abc   分享   

1、基本類型和參考型別

在C語言裡面,是有指標這麼一個變數類型的,指標變數儲存的就是所要指向內容的地址。在Java裡面,沒有了指標的這麼個說法,而是換了一個詞:參考型別變數。

先說Java裡面的基本類型,所謂基本類型,很簡單,就是一個數字,一個字元或一個布爾值,數字裡麵包含整型、浮點型等,沒有什麼好說的。

再說這個參考型別,他的概念就很像指標了。引用變數的值指向記憶體空間的引用,就是C中的地址,所在這個地址裡面的內容就是要被他引用的對象。

2、String就是一個參考型別

大多數時候,我們在用String的時候,就是這麼用的:

String str = "balabala";

直接賦值,簡單易懂。

其實,還有下面的三種使用String的方式,利用API裡面的String構造方法:

String str = new String(char[] array);

array是一個字元數組,這就很形象了,在array裡面字元跟字元是分開的,需要array[i]來擷取。

通過String的這一個構造方法之後,將“字元”給“串”起來了,就變成了字串。

另外一種構造方式:

String str = new String(char[] array,int offset,int count);

array還是那個字元數組,offset是指數組中的某一個位置,count值數量,綜合的意思就是:將array數組中,從第offset個字元開始的,往後數count個字元的“子數組”,串成字串。

舉例:char[] array = {‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘};String str = new String(array,2,3);

此時str就是cde,數組從0開始數。

最後一個,最簡單:

String str = new String("abcdefg");

3、基本類型跟參考型別中“等號”的判斷區別

int a = 1; int b = 1; system.out.println(a == b);

輸出的是true,因為基本類型中,==是進行值的判斷。

String str1 = "abc";String str2 = "abc";system.out.println(str1 == str2);

輸出的是true,因為參考型別中,==也是進行值的判斷?

不,不是這樣的,雖然表面上看,好像是這樣,但其實不是的,在仔細看一下下面的例子:

String str1 = "abc";String str2 = new String("abc");system.out.println(str1 == str2);

這時輸出的就是false了,然而str1、str2的內容是一樣的,這是為什嗎?

這是因為,參考型別的"=="是進行地址值的判斷,判斷所引用的內容是不是是一個地址,是不是一個地方的。

所以,反過來說,若參考型別的"=="是false,那麼倆個參考型別的引用地址是不同的,這就引出了下面要說的內容了。

為什麼str1,str2的內容相同,但是是不同的呢?

4、直接賦值建立跟new String建立的區別

在2中說到了使用String的四種方式,1個直接賦值,3個new建立。

(1)String str1 = "abc";

  上面的直接賦值,其實是分成三步的:

  第一步,是將“abc”的這個字串內容在“堆”中建立出來。

  第二步,將建立出來的“abc”的地址儲存在一個叫做“字串池”的東西裡面。

  第三步,將“abc”的地址給str1(即str這個參考型別指向了abc這個字串所在的記憶體位址)

  這時候,如果再來一個String str2 = "abc";

  java會先去字串池定址尋找是否有這麼一個字串也叫“abc”,如果沒有,參見上面三步操作。很明顯,我們剛剛建立過,肯定能找到,然後將尋找得到的地址也賦給str2。

(2)String str1 = new String("abc");

  當使用new的時候,不管內容是什麼,不會執行上面的三步,直接在堆中建立一個傳新版本的字串,將字串abc的地址(假設0x001)再給str1。

  這時候再來一個:String str2 = new String("abc");則字串abc的地址(假設0x002)給str2。

(3)所以,直接賦值的string,如果值相同,那麼引用的地址也相同。

  而,new出來的,不管值的內容相不相同,地址必然不同,這就是為什麼3裡面的str1==str2是false的原因了,來張圖:

  

 

Java中的String類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.