【发布时间】:2019-11-03 17:44:26
【问题描述】:
我在使用 jdk 13.0 的 Java 中遇到了以下奇怪行为:
String foo = "Something";
String bar = "Other";
if (foo.equals(bar));
{
System.out.println("Face palm");
}
遗憾的是,以上比较成功并且“掌心”被打印出来了。 导致这种行为的原因是 if 语句末尾存在 分号。
这样做的正确方法是:
String foo = "Something";
String bar = "Other";
if (foo.equals(bar))
{
System.out.println("Face palm");
}
谁能解释一下为什么 Java 会这样?
这可能只是编译器未捕获的语法错误吗?
【问题讨论】:
-
if (foo.equals(bar));等价于if (foo.equals(bar)) {} -
一些 IDE 可以选择指示空语句(作为警告甚至是错误)
-
它本身并不是真正的语法 error。
if(以及while和for)需要一个声明 来关注它们。碰巧;本身就是一个有效的声明。 if/for/while 有一个空语句的用法(如果表达式有副作用),但它们有点令人困惑。