当前位置: 首页 > 面试题库 >

为什么Java if语句以分号结尾时失败?

金晗日
2023-03-14
问题内容

我在处理应用程序时犯了一个编码错误,它是对null引用的测试。我花了几个小时才发现问题所在,但是我不明白的是为什么代码如此表现。

String name = null;
String value = null;

if(name != null && value != null);
{
    System.out.println("Values not null");
}

if语句以结束;,这是我的错误,Values not null即使很明显两个值都为null ,也将打印出来。有人可以解释为什么吗?


问题答案:

该分号结束了一条语句(一个空的语句),因此编译器将您的代码翻译为以下内容:

if(name != null && value != null)
{
  //nothing here
}
{
  System.out.println("Values not null");
}

换句话说,如果ifexpression是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)在某些语言中)。



 类似资料:
  • if语句以结尾,这是我的错误,被打印出来,即使很明显这两个值都为null。有人能解释为什么吗?

  • 问题内容: 今天,在搜索错误半小时之后,我发现可以在if语句后加上分号而不是代码,如下所示: 从根本上讲,这意味着无论是否相等,都将完成工作,并且该语句毫无意义。Java为什么不给我一个错误?有什么情况会有用吗? 问题答案: Why does it happen? Java语言规范说: 空话 空语句不执行任何操作。 空语句的执行总是正常完成 从本质上讲,这意味着你要在a == b时执行空语句 Wh

  • 问题内容: 我不小心写了一个Java语句,结尾有两个分号。Java编译器不显示任何错误,它可以运行。 码: 出于学习目的,我尝试在分号后添加不同的字符,并且Java编译器已将编译时错误显示为 令牌“)”上的语法错误,请删除此令牌 。 这个说法: 为什么Java将分号和其他字符视为不同? 问题答案: 因为双分号不会被视为双分号,而是会被视为分号和空语句。空的语句不执行任何操作,这不是错误。

  • 我正在学习Java认证,在一次模拟考试中,我看到了一个非常奇怪的for-loop实现。该练习显示了以下语法: 一开始,我认为这是一个语法错误,因为我一直知道“for循环”的语法需要大括号,或者,如果只有一条指令需要迭代,我们可以跳过大括号,并在循环之后将语句对齐。-因为我以前没见过以分号“;”结尾的For循环-- 然后我试图找到一些关于它的留档,但不幸的是,我找不到任何解释为什么是合法代码声明。仅

  • 问题内容: 假设我有一个看起来像这样的密码: 我该如何使用分号作为最后一个字符来使用它。该密码可在SSMS和ODBC中使用,但不能与连接字符串一起使用。我已经尝试过了,但是似乎没有用。 这是针对ASP.NET Web应用程序的。据我所知,这是不可能的。更新:有可能! 问题答案: 将您的密码用单引号引起来。例如,给定密码,您的连接字符串应包含。 我正在使用以下代码连接到SQL Server 2008