java String 類的一些理解 關於==、equals、null

來源:互聯網
上載者:User

1、String 的==與equal()
在對字串的相等判斷,==判斷的是地址是否相同,equal()判斷的是字元值是否相同。大多數時候==跟equal()的結果都是相同的。這是因為String對象是不變模式的,如果你不是明確地new一個String對象,Java對於String對象的儲存預設的是會把新產生的String 對象放到一個緩衝區,然後每次判斷緩衝區中是否已經有了這個對象,如果有了,那麼後建立的同樣字元值的String對象也會指向最初建立是該字元值對象的地址。也就是說字元值相同的時候,大多數情況下地質也是相同的。==與equal()效果是相同的。但是當對象是str = new String(“abc”)產生的而不是直接str = “abc”這樣賦值產生,或者經過了一些字串串連處理,或者通過StringBuffer等對象產生,都會在記憶體中開闢新的地址的,這個時候==和 equal()結果是不同的。
是不是稍微有些複雜?這裡需要一些關於記憶體,堆棧,對象儲存方面的理解。我不想糾纏於這個問題的討論。如果不能理解,那麼只要記住如果你想要判斷兩個字串的字元值是否相等,沒有別的要求的時候,那麼請使用equal()而不是==,至於什麼時候需要使用==,我想當你需要的時候,你自然就會明白了。實際上,對於字串的判斷,我們很少需要用==的。

2、關於str.equal(“abc”)和”abc”.equal(str)
這個好像爭論也挺多的,第一種常量寫在後面可能符合大多數人的習慣,也符合我們的邏輯思維。但是需要多一個str是否為null的判斷。否則這裡是有可能出現異常的。而後一種寫法不需要多做關於是否為null這個判斷。就我個人喜好來說,比較喜歡後一種寫法。

3、關於String的null

/**
* 測試java的String為null 的情況
* create date:2009-6-3
* author:Administrator
*
*/
public static void testNull(){
String a= null,b = null,c="呵呵";
System.out.println(a == null);
System.out.println(a+b+c);
}
方法運行結果:
true
nullnull呵呵
所以大家要注意了做字串合併作業時,別忘記判斷null,否則結果會不太讓你爽啊!

聯繫我們

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