if(str.isEmpty()){str = DEFAULT_STRING;}上面的代碼有時會給出一個NullPointerException。 如何重寫條件(從A-D中選擇),使這個問題不會發生?A:str == null && str.isEmpty()B:str == null || str.isEmpty()C:str.isEmpty() && str == nullD:str.isEmpty() || str == null 答案是B。我想知道B和D有什么區別?為什么D不對?
1 回答

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
推薦你去看看源碼
str == null 是看這個對象是否分配內存空間, 如果沒有分配自然就是null , 也就是這個引用是null
str.isEmpty() 是判斷這個對象是否為空值, 但是需要這個對象引用不是null, 也就是說必須分配內存空間, 才可以
public boolean isEmpty() { return count == 0; }
可以看上面源碼 這個方法是判斷這個對象的count == 0
你問題B 和 D的區別 , 一個是先判斷對象引用是否為null(也就是是否分配內存空間) , 然后再判斷是否為空值; 這個是正確的;
另一個先判斷是否為空值, 然后再判斷對象引用是否為null, 但是 這個對象引用都是null, 這里在調用這個空引用的對象count屬性自然會報空指針異常
- 1 回答
- 0 關注
- 345 瀏覽
添加回答
舉報
0/150
提交
取消