JAVA中String = null 與 String = ""的區別
筆者今天在Debug的時候發現的
NPE(NullPointerException)
,辛辛苦苦地調試了半天,終於看出了究竟
源頭就是出在了對String為null的調用上,這時會拋出
NullPointerException
首先,筆者在前面的博客中提到了對字符串進行比較的方法。傳送門,通過先閱讀這篇文章,可能對以后的理解更有幫助。
下面介紹幾個比較常見的錯誤寫法
if(str == "")
{
//
}
因為==操作在對String這種引用數據類型來說,比較的是地址,兩者的地址不同,所以這種寫法的if語句永遠不會被執行。
if(str.equal(""))
{
//
}
這種寫法也有可能出錯,如果當str=null時,對它進行調用就會拋出NullPointerException
異常。
所以正確的寫法如下:
if(str!=null&&str.equal("something")
{
//
}
或者
if(!"something".equal(str))
{
//這種寫法,如果你沒有給str賦初值,編輯器會提示你
//如果str==null,那么這個if會被執行
}
這兩種寫法親測實用,並且更安全。
說完了一些例子,下面讓我來說一下他們的真正的區別吧
String str1 = null; //str1引用為空,它沒有地址,它是一個沒有被實例化的對象
String str2 = ""; //str引用為空字符串,它有地址,它是被實例化的對象,值為空而已。
總結來說
所以說對str1進行比較時要用==操作,如果使用str1.equal()則會拋出NullPointerException
對str2進行比較時要用str2.equal(),如果使用str2=="你想要比較的字符串",這個boolean
值永為false
update by 2017/3/30 19:42
by 一枝豬