java - 为什么没有编译时错误?奇怪 - Java

标签 java coding-style syntax if-statement

我有一个 if 语句检查一些值,并遇到了一个奇怪的错误(不确定!)。我的代码在语法上不正确,结果产生了错误的结果,但是 eclipse 在编译时没有引发任何错误。为什么我的以下代码有效?

if((this.trackPointList.get(point).getTurnOutId().equals(seg.getSegRef().getTurnOut())) && seg.getSegRef().getKind().equals("arc")); // <---- See here I have semicolon
    {
       ... code to run ...
    }

以上代码仅检查第一个条件并忽略 seg.getSegRef().getKind().equals("arc") 但我想这应该会在编译时引发问题,对吗?一旦我通过逐行浏览并找到这个分号来调试它,我的逻辑就起作用了。如果有人可以解释,如果它是一个有效的语法,我将不胜感激。

请赐教!

最佳答案

; 使 Java 认为 if 条件的主体是完整的,即使它前面没有其他代码也是如此。实际上,执行了 if 语句中的代码,但没有主体存在,因为 ; 在那里。

{ ...要运行的代码...} 只是一个执行的代码块,在该 block 内声明的任何内容在 block 外都是不可见的。它总是在这里运行,因为它不是 if block 的一部分。

编辑:这是关于 { } block 的另一个堆栈溢出问题:What do curly braces in Java mean by themselves?

关于java - 为什么没有编译时错误?奇怪 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7523518/

相关文章:

coding-style - 在函数内部或调用之前进行条件检查?

php - 代码风格名称

java - 为什么必须首先在 Java 构造函数中委托(delegate)给不同的构造函数?

optimization - 为什么大多数语言不能优化 “0 * …”,并且有任何语言可以优化?

java - MySQL Java 更新语法

java - 使用 Spring IoC 设置枚举值

java - 如何在 Java 中获取小程序查看器像素的颜色?

java - Android Array Adapter 选择了错误的 ID

java - 安卓工作室 2.3 错误 : "Gradle sync failed: Cause: services.gradle.org"

c# - 为什么在一行中声明一个变量,然后在下一行赋值给它?