空指针异常

zr_dixuexiongying 2008-02-05 07:28:09
我上次碰到一个题目,虽说是基础,可也容易把人搞糊涂,题目是

下面哪些语句可引起空指针异常

String str = null;

1> if(str!=null && str.length()>0)
2> if(str!=null & str.length()>0)
3> if(str!=null || str.length()>0)
4> if(str!=null | str.length()>0)
5> if(str==null && str.length()>0)
6> if(str==null & str.length()>0)
7> if(str==null || str.length()>0)
8> if(str==null | str.length()>0)
9> if(str!=null && str.length()==0)
10> if(str!=null & str.length()==0)
11> if(str!=null || str.length()==0)
12> if(str!=null | str.length()==0)
13> if(str==null && str.length()==0)
14> if(str==null & str.length()==0)
15> if(str==null || str.length()==0)
16> if(str==null | str.length()==0)

到底是怎么判断的!请给一个很明确的答复.
...全文
102 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zr_dixuexiongying 2008-02-06
  • 打赏
  • 举报
回复
谢谢大家!是我搞反了,不好意思
bxdg42578670 2008-02-05
  • 打赏
  • 举报
回复

&& 短路与!~ 如果第一个条件不满足! 就不会判断下一个条件!~
相反: 如果第一个条件满足, 那么也要判断第二个条件是否满足!~
所以: if(str != null && str.length()>0) 第一个条件不满足!~ 所以不会抛出异常!


& 不管什么时候都要两个条件满足!~ 并且要进行所有的判断!
所以: if(str != null & str.length()>0) 进行了str.length()判断!抛出了空指向异常!

|| 短路或!~ 如果第一个条件满足! 就不会判断下一个条件!~
相反: 如果第一个条件不满足,那么也要判断第二个条件是否满足!~

所以: if(str == null || str.length()>0) 不会抛出异常!~~

| 不管什么时候都要进行两边的判断!~ 只要有一个为真即为真!~那么为真!~
所以 if(str == null | str.length()>0) 中 进了str.length()>0的判断, 抛出了空异常!~
Godkill 2008-02-05
  • 打赏
  • 举报
回复
因为你的str.length()错了。。你定义的是String str=null这只是一个是空地址不是空值。。所以不可能用str.length()来判断长度。。如果你这样定义就对了String str=new String();这样就是空值了。str.length()就等于0
dracularking 2008-02-05
  • 打赏
  • 举报
回复
是你理解相反了
&&和¦¦才有短路功能
zr_dixuexiongying 2008-02-05
  • 打赏
  • 举报
回复
我不明白的就是书上明明是说&&和||是两个都要判断,而&和|却是判断一个,是短路操作,可在这道题目里好象恰恰是相反的
zr_dixuexiongying 2008-02-05
  • 打赏
  • 举报
回复
是的!我知道&&和||是两个都要判断,所以第一个if(str!=null&&str.length()>0)就应该抛出空指针异常啊!
因为就算前面一个为false,也要继续判断后面的啊!可是结果并没有抛出空指针啊!相反str!=null&str.length()>0
却抛出了空指针.
dracularking 2008-02-05
  • 打赏
  • 举报
回复
1.首先要确定何种情况下会发生空指针异常

Thrown when an application attempts to use null in a case where an object is required. These include:

Calling the instance method of a null object.
Accessing or modifying the field of a null object.
Taking the length of null as if it were an array.
Accessing or modifying the slots of null as if it were an array.
Throwing null as if it were a Throwable value.


在本例中也就是调用str.length()会抛出空指针异常 因为它符合第一条:访问一个空对象的实例方法

2.位运算符(|,&)在充当逻辑运算符时功能相当 就是不会短路

true || false
false && true
以上两种情况均只会执行运算符左半部分 称之为短路操作

true | false
false & true
就不存在以上会短路的情况 虽然逻辑式值相同
Godkill 2008-02-05
  • 打赏
  • 举报
回复
只有一个|或&是只判断前面的条件。如果成立就执行。如果不成立再判断后面一个。二有两个|或&的是前后两个条件都进行判断

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧