我在开发应用程序时犯了一个编码错误,这是对空引用的测试。我花了几个小时才发现问题所在,但我不明白的是为什么代码会这样。
String name = null;
String value = null;
if(name != null && value != null);
{
System.out.println("Values not null");
}
if 语句以;
,那是我的错误,Values not null
即使很明显两个值都为空,也会被打印。有人能解释一下为什么吗?
这个分号结束了一个语句(一个空的),所以你的代码被编译器翻译成这样:
if(name != null && value != null)
{
//nothing here
}
{
System.out.println("Values not null");
}
换句话说,如果if
表达式为true
,它执行空代码块。那么无论是否if
无论真假,运行时都会继续并运行包含以下内容的块:System.out
。空语句仍然是一个语句,因此编译器接受您的代码。
另一个可能发生此类错误的地方:
for(int i = 0; i < 10; ++i);
{
System.out.println("Y U always run once?");
}
甚至更糟(无限循环):
boolean stop = false;
while(!stop);
{
//...
stop = true;
}
我花了几个小时才发现问题所在
好的 IDE 应该立即警告您此类声明,因为它可能永远不正确(例如if(x = 7)
在某些语言中)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)