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。

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

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