在Java裡判斷字串是否相等(字串池)

來源:互聯網
上載者:User

CSDN發現了一個問題。類是這樣寫的:

public   class   Sub{  
String   str=new   String( "good ");   //一個地址的傳遞,new出來的對象,在記憶體中已經開闢了空間
 
public   static   void   main(String   args[]){  
Sub   ex=new   Sub();  
ex.change(ex.str);  
System.out.println(ex.str);  
}  
public   void   change(String   bb){  
bb= "test   ok " }

問題:String   str=new   String( "good ") 和String str="good"的區別?

體會1:str是一個String類型的對象引用,他是Sub類的類變數。當ex對象引用使用change方法時。bb是str引用的拷貝。可以通過bb訪問原str的對象。而方法裡當bb="test ok"的時候他把bb指向了一個新的對象中。這時候我們就要引出java字串的概念了。

體會2:字串池(轉)

String a = "Hello";
String b = "Hello";
String c = new String("Hello");
String d = new String("Hello");
System.out.println(a == b);
System.out.println(b == c);
System.out.println(c == d);
System.out.println(a.equals(b));
System.out.println(b.equals(c));
System.out.println(c.equals(d));

結果是true,false,false,true,true,true。這裡就涉及到字串池。“字串池”,是Java為了提高記憶體利用率而採用的措施:

當遇到String a = "Hello"; 這樣的語句時,Java會先在字串池中尋找是否已經存在"Hello"這個字串,如果沒有,則建立字串"Hello"對象,然後變數 a 指向這個地址;然後遇到語句String b = "Hello",這時字串池中已經有 "Hello"了,所以直接讓變數b也指向這個地址,省去了重新分配的麻煩。而在Java中,操作符“==”對於兩個基本型來說,是判斷其內容是否相同,對於兩個對象來說,則是判斷其地址是否相同,所以a == b返回 true。

那麼String c = new String("Hello")又如何處理呢?如果是這種寫法,則不會去訪問字串池,而是先為變數 c 開闢空間,然後將值寫入空間。所以a == c返回false,c == d同樣返回false。

至於String的equals方法,因為它比較的不是對象的地址,而是對象的值,所以都返回true就不奇怪了。

Java虛擬機器有一個字串池,儲存著幾乎所有的字串對象。字串運算式總是指向字串池中的一個對象。使用new操作建立的字串對象不指向字串池中的對象但是可以使用intern方法使其指向字串池中的對象.(註:如果池中已經有相同的字串--使用equals方法確定,則直接返回池中的字串,否則先將字串添加到池中,再返回)。池中兩個相等的字串如果使用“==”來比較將返回真。

總結:也就是在change這個方法中,bb已經寫入str空間。而bb在等於“test ok”的時候是運用字串池建立了對象中了。所以不能賦值。可以這樣 bb="test ok"; this.str=bb;

文章出處:飛諾網(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/2007114/83499.html

相關文章

聯繫我們

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