Java中的null是一個(gè)特殊的值,表示無(wú)值、空值或缺失值。只有引用類(lèi)型可以為null,基本類(lèi)型不能。當(dāng)一個(gè)引用類(lèi)型的變量未初始化或賦值為null時(shí),它就指向null。
null比較是對(duì)引用類(lèi)型進(jìn)行比較,而不是對(duì)對(duì)象的內(nèi)容進(jìn)行比較。可以使用==運(yùn)算符或者equals()方法進(jìn)行比較。當(dāng)兩個(gè)引用類(lèi)型都為null時(shí),它們是相等的。如下面的例子所示:
String str1 = null; String str2 = null; System.out.println(str1 == str2); //輸出true System.out.println(str1.equals(str2)); //會(huì)報(bào)NullPointerException異常
在第一個(gè)比較中,兩個(gè)引用類(lèi)型都指向null,所以它們是相等的。在第二個(gè)比較中,因?yàn)閟tr1和str2都為null,所以調(diào)用equals()方法會(huì)導(dǎo)致NullPointerException異常。
需要注意的是,在比較引用類(lèi)型和null時(shí),要將null放在比較運(yùn)算符的右側(cè)。如果將null放在左側(cè),會(huì)導(dǎo)致編譯錯(cuò)誤:
String str = null; if (null == str) { //do something } if (str == null) { //編譯錯(cuò)誤:Incomparable types:and String //do something }
在第一個(gè)if語(yǔ)句中,將null放在比較運(yùn)算符的右側(cè),代碼可以正常編譯。在第二個(gè)if語(yǔ)句中,將null放在左側(cè)導(dǎo)致編譯錯(cuò)誤。
總的來(lái)說(shuō),null是Java中一個(gè)非常有用的特殊值,但要注意使用null比較時(shí)的細(xì)節(jié)。