java null總結(jié)

1定義

null 是所有引用類(lèi)型的默認(rèn)值。

2. 轉(zhuǎn)換

null既不是對(duì)象也不是一種類(lèi)型,它僅是一種特殊的值,你可以將其賦予任何引用類(lèi)型,它還僅僅是一個(gè)特殊值,并不屬于任何類(lèi)型,用instanceof永遠(yuǎn)返回false。
不能將null賦給基本類(lèi)型變量,例如int、double、float、boolean。如果將null賦值給包裝類(lèi)object,然后將object賦給各自的基本類(lèi)型,編譯器不會(huì)報(bào),但是你將會(huì)在運(yùn)行時(shí)期遇到空指針異常。
null可以被轉(zhuǎn)化為任何引用類(lèi)型,可以調(diào)用引用類(lèi)型中的靜態(tài)方法,但是不可以調(diào)用非靜態(tài)方法,運(yùn)行時(shí)會(huì)報(bào)錯(cuò)。

public class NullTest {
    public static void main(String[] args) {
        Object o = (Object) null;
        //int i  = null;
        Integer i = (Integer) null;
        String s = (String) null;

        System.out.println("o: " + o + "i: " + i + "s: " + s);  //o: nulli: nulls: null
        System.out.println(o instanceof Object);  //false
    }
}

3. 運(yùn)算

null==null返回true,被轉(zhuǎn)換為同種類(lèi)型的null,都返回true,不同類(lèi)型直接編譯報(bào)錯(cuò).
用String轉(zhuǎn)換后的null可以進(jìn)行字符串運(yùn)算,這是因?yàn)樽址M(jìn)行連接的時(shí)候,編譯器對(duì)null進(jìn)行了特別的優(yōu)化,其實(shí)就是例化StringBuilder,在調(diào)用append()方法時(shí)對(duì)null的一個(gè)特別處理,當(dāng)為null時(shí),轉(zhuǎn)化為“null”,最后調(diào)用toString()返回一個(gè)String對(duì)象.
用八大基本類(lèi)型轉(zhuǎn)換后的null,不可以進(jìn)行基本類(lèi)型的運(yùn)算,否則會(huì)出現(xiàn)編譯或者運(yùn)行錯(cuò)誤.

public class NullTest {
    public static void main(String[] args) {
        Object o = (Object) null;
        Integer i = (Integer) null;
        Integer j = (Integer) null;
        String s = (String) null;
//        System.out.println(Objects.equals(i, j));
//        System.out.println(i.equals(s));
 //       System.out.println(null == null);
//        i = i + 1;   //運(yùn)行時(shí)空指針

//        System.out.println(2 == null);

        System.out.println("o: " + o + "i: " + i + "s: " + s);
        System.out.println(o instanceof Object);

    }
}

4. 集合中的key

集合類(lèi) key value super 說(shuō)明
HashTable 不能為null 不能為null Dictionary 線(xiàn)程安全
ConcurrentHashMap 不能為null 不能為null AbstractMap 線(xiàn)程局部安全
TreeMap 不能為null 可以為null AbstractMap 線(xiàn)程不安全
HashMap 可以為null 可以為null AbstractMap 線(xiàn)程不安全

hash表需要進(jìn)行hash值運(yùn)算,key不能為null好理解,如果map中value為null也好理解。
表中不好理解的是HashMap中key可以為null,看下面代碼中對(duì)null有個(gè)特殊處理,索引位置為0。

image.png

表中第二個(gè)不好理解的點(diǎn)是ConcurrentHashMap中value不能為null的問(wèn)題。
image.png

至于為什么,參考https://laiqitech.com/125/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容