当前位置: 技术问答>java相关
问一个简单问题: if (key!=null && key.equals("TT")) 与if (key.equals("TT") && key!=null)这样的条件是相同的么?
来源: 互联网 发布时间:2015-08-11
本文导语: 在我写的JSP中: if (key.equals("TT") && key!=null) { out.print("hello"); } 这样就会抱错. 而 if (key!=null && key.equals("TT")) { out.print("hello"); } 就会执行。。。 这两...
在我写的JSP中:
if (key.equals("TT") && key!=null)
{
out.print("hello");
}
这样就会抱错. 而
if (key!=null && key.equals("TT"))
{
out.print("hello");
}
就会执行。。。
这两个比较条件是不同么???
if (key.equals("TT") && key!=null)
{
out.print("hello");
}
这样就会抱错. 而
if (key!=null && key.equals("TT"))
{
out.print("hello");
}
就会执行。。。
这两个比较条件是不同么???
|
是不一样的,对于A && B 这样的布尔表达式,先计算A,若A为false,则不会计算B,其实可以用下面的语句来表达这种'短路':
A && B if(A)
{
if(B) return true;
else return false;
}
else return false;
据我所知,C++,java里面都是这种语意,
A && B if(A)
{
if(B) return true;
else return false;
}
else return false;
据我所知,C++,java里面都是这种语意,
|
&&是短路与,这点上面两位说得很明白了。可报错似乎不应该啊。试试定义key时初始化吧。
|
因为JVM是从前向后,从左到右执行的,if (key.equals("TT") && key!=null),如果key=null, key.equals("TT") 肯定错,因为null没有equals方法。
|
或者你可以反过来写;
if (key == null || key.equals(""))
{
//key is null or key==""
}
else {
out.print("hello");
}
if (key == null || key.equals(""))
{
//key is null or key==""
}
else {
out.print("hello");
}
|
如果 key = null 你的前一个判断条件就会出现异常,因为调用key.equals("TT"),key对象根本就不存在,当然也就不能调用他的方法了。而第二个呢,当key = null 的时候,就不再作key.equals("TT")的调用了,这好像就是所谓的短路求值的方法。