java String 類的一些理解 關于==、equals、null
更新時間:2009年06月04日 02:29:47 作者:
在對字符串的相等判斷,==判斷的是地址是否相同,equal()判斷的是字符值是否相同。大多數(shù)時候==跟equal()的結果都是相同的。
1、String 的==與equal()
在對字符串的相等判斷,==判斷的是地址是否相同,equal()判斷的是字符值是否相同。大多數(shù)時候==跟equal()的結果都是相同的。這是因為String對象是不變模式的,如果你不是明確地new一個String對象,Java對于String對象的保存默認的是會把新生成的String 對象放到一個緩沖區(qū),然后每次判斷緩沖區(qū)中是否已經有了這個對象,如果有了,那么后建立的同樣字符值的String對象也會指向最初建立是該字符值對象的地址。也就是說字符值相同的時候,大多數(shù)情況下地質也是相同的。==與equal()效果是相同的。但是當對象是str = new String(“abc”)生成的而不是直接str = “abc”這樣賦值生成,或者經過了一些字符串連接處理,或者通過StringBuffer等對象生成,都會在內存中開辟新的地址的,這個時候==和 equal()結果是不同的。
是不是稍微有些復雜?這里需要一些關于內存,堆棧,對象保存方面的理解。我不想糾纏于這個問題的討論。如果不能理解,那么只要記住如果你想要判斷兩個字符串的字符值是否相等,沒有別的要求的時候,那么請使用equal()而不是==,至于什么時候需要使用==,我想當你需要的時候,你自然就會明白了。實際上,對于字符串的判斷,我們很少需要用==的。
2、關于str.equal(“abc”)和”abc”.equal(str)
這個好像爭論也挺多的,第一種常量寫在后面可能符合大多數(shù)人的習慣,也符合我們的邏輯思維。但是需要多一個str是否為null的判斷。否則這里是有可能出現(xiàn)異常的。而后一種寫法不需要多做關于是否為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,否則結果會不太讓你爽啊!
在對字符串的相等判斷,==判斷的是地址是否相同,equal()判斷的是字符值是否相同。大多數(shù)時候==跟equal()的結果都是相同的。這是因為String對象是不變模式的,如果你不是明確地new一個String對象,Java對于String對象的保存默認的是會把新生成的String 對象放到一個緩沖區(qū),然后每次判斷緩沖區(qū)中是否已經有了這個對象,如果有了,那么后建立的同樣字符值的String對象也會指向最初建立是該字符值對象的地址。也就是說字符值相同的時候,大多數(shù)情況下地質也是相同的。==與equal()效果是相同的。但是當對象是str = new String(“abc”)生成的而不是直接str = “abc”這樣賦值生成,或者經過了一些字符串連接處理,或者通過StringBuffer等對象生成,都會在內存中開辟新的地址的,這個時候==和 equal()結果是不同的。
是不是稍微有些復雜?這里需要一些關于內存,堆棧,對象保存方面的理解。我不想糾纏于這個問題的討論。如果不能理解,那么只要記住如果你想要判斷兩個字符串的字符值是否相等,沒有別的要求的時候,那么請使用equal()而不是==,至于什么時候需要使用==,我想當你需要的時候,你自然就會明白了。實際上,對于字符串的判斷,我們很少需要用==的。
2、關于str.equal(“abc”)和”abc”.equal(str)
這個好像爭論也挺多的,第一種常量寫在后面可能符合大多數(shù)人的習慣,也符合我們的邏輯思維。但是需要多一個str是否為null的判斷。否則這里是有可能出現(xiàn)異常的。而后一種寫法不需要多做關于是否為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,否則結果會不太讓你爽啊!
相關文章
SpringBoot設置首頁(默認頁)跳轉功能的實現(xiàn)方案
這篇文章主要介紹了SpringBoot設置首頁(默認頁)跳轉功能,本文通過兩種方案,給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07intellij idea14打包apk文件和查看sha1值
這篇文章主要為大家詳細介紹了intellij idea14打包apk文件和查看sha1值,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-10-10java8新特性 stream流的方式遍歷集合和數(shù)組操作
這篇文章主要介紹了java8新特性 stream流的方式遍歷集合和數(shù)組操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復的操作方法
這篇文章主要介紹了MySQL數(shù)據(jù)文件直接通過拷貝備份與恢復的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09Java中數(shù)組與集合的相互轉換實現(xiàn)解析
這篇文章主要介紹了Java中數(shù)組與集合的相互轉換實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08解決CollectionUtils.isNotEmpty()不存在的問題
這篇文章主要介紹了解決CollectionUtils.isNotEmpty()不存在的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02