黑馬程式員—Java中的字串淺析

來源:互聯網
上載者:User

---------------------- android培訓、java培訓、期待與您交流! ---------------------

Java中的String類,即字串類,它的對象往往與其他對象有很多不同的地方,讓人琢磨不透。經過幾天的學習,我想總結一下String類的一些特點。

1. 相當於常量:

String字串是常量,建好之後不可以修改(想要隨時修改可以使用StringBuffer類)。

2. 儲存位置:

通常定義一個對象是以這樣的方式 

String str = new String("test"); 

但是String類還可以直接賦值 

String str = “test”; 

這兩種方式到底有什麼區別呢?這就需要弄清楚Java中的字串是怎麼儲存的。這個問題要涉及到Java中兩個重要的儲存區——堆(Heep)和字串池(String Pool)。堆是用來儲存物件的,包括該對象的特有屬性(即非靜態屬性,方法存放在方法區,這裡暫時不討論)。字串池用來存放當前用到的不重複的字串,方便使用,以免重複定義相同字串。

語句String str = new String("test");的過程是這樣的,首先看字串池中有沒有“test”字串,如果沒有就在池中加入“test”字串,之後在堆中建立一個對象(也有一份“test”字串資訊),將對象的地址返回給str變數。

語句String str = “test”;的執行過程是這樣的,首先查看字串池中有沒有‘“test”字串,如果沒有就在池中加入“test”字串,之後將池中“test”字串的地址返回給str變數。可以看到,這裡並沒有建立對象。

這樣一來,就會有一些重要的特性產生

(1)String str1 = “test”; 

  String str2 = “test”;

str1與str2的值相等。因為他們的值都是池中“test”的地址(每個字串在池中只有一份)

(2)String str1 = new String(“test”);

           String str2 = new String("test");

  str1與str2的值不相等。因為他們的值是兩個獨立的對象的地址,只不過對象裡面儲存的字串相同而已(第一句話執行後,pool中有“test”字串)。

3. equals方法與“==”

判斷兩個對象(a和b)是否是同一個對象,可以有兩種方法供選擇

(1)System.out.println(a.equals(b));

(2) System.out.println(a==b);

equals和“==”又有什麼區別呢?

“==”是直接比較兩個變數的值(對象的地址)是否相同,如果相同就是同一個對象,返回true,否則返回false。

  equals是一個判斷對象是否相同的方法,Object類中定義它與“==”的功能一樣,地址一致則返回true,否則返回false。但是String類複寫(Overide)了這個方法,功能變為,如果兩個String對象指定的字串相同則返回true,不同則返回false,也就是說,他比較的是對應字串的值是否相同。

故:

String a = new String("abc");

String b = new String("abc");

String c = "abc";

String d = "abc";

a.equals(b)的結果是true

a==b的結果是false

c.equals(d)的結果的true

c==d的結果是true

a.equals(c) 的結果是true

以上三點是我的一點小總結,有不妥的地方歡迎指正,謝謝大家。

----------------------- android培訓、java培訓、期待與您交流! ----------------------

詳細請查看:http://edu.csdn.net/heima

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.