猿问

一个问题?有关||的应用和空指针异常

if(str.isEmpty()){
str = DEFAULT_STRING;
}

上面的代码有时会给出一个NullPointerException。 如何重写条件(从A-D中选择),使这个问题不会发生?

A:
str == null && str.isEmpty()


B:
str == null || str.isEmpty()


C:
str.isEmpty() && str == null


D:
str.isEmpty() || str == null

 

答案是B。我想知道B和D有什么区别?为什么D不对?


慕莱坞森
浏览 333回答 1
1回答

一只名叫tom的猫

推荐你去看看源码str == null  是看这个对象是否分配内存空间,  如果没有分配自然就是null ,  也就是这个引用是null  str.isEmpty() 是判断这个对象是否为空值, 但是需要这个对象引用不是null, 也就是说必须分配内存空间, 才可以public boolean isEmpty() {    return count == 0; }可以看上面源码 这个方法是判断这个对象的count == 0   你问题B 和 D的区别  , 一个是先判断对象引用是否为null(也就是是否分配内存空间) , 然后再判断是否为空值;  这个是正确的;另一个先判断是否为空值, 然后再判断对象引用是否为null,  但是 这个对象引用都是null, 这里在调用这个空引用的对象count属性自然会报空指针异常
随时随地看视频慕课网APP
我要回答