为什么Java在语句结尾处不显示双分号错误?

M.A*_*ali 11 java java-compiler-api

我不小心写了一个带有两个分号的java语句.java编译器没有显示任何错误,它运行.

码:

System.out.println("Length after delete the text is "+name.length());;
Run Code Online (Sandbox Code Playgroud)

出于学习目的,我尝试在分号后添加不同的字符,并且java编译器已将编译时错误显示为令牌")"上的语法错误,删除此标记.

这个说法:

System.out.println("Length after delete the text is "+name.length());)
Run Code Online (Sandbox Code Playgroud)

为什么java将分号和其他字符视为不同?

小智 32

因为双分号不是双分号,而是分号加空语句.一个空的陈述,什么也不做,不是一个错误.

  • +1,确切地说,它非常类似于在代码中编写`{} {} {} {}(括号,我的意思)`. (3认同)
  • 实际上,它是一个空**声明**.Java中没有像空表达式那样的东西. (2认同)

Paŭ*_*ann 15

正如其他答案所述,通常第二个分号被解释为空语句,只要声明是允许的,这是允许的.

实际上,有些情况下双分号确实会产生错误:

public int method() {
   return 1;;
}
Run Code Online (Sandbox Code Playgroud)

当编译器确定的位置不可达(这在JLS精确限定,但后一个直接包括位置return,break,continuethrow),没有语句被允许存在,甚至不是空的.


das*_*ght 10

根据Java语言标准,第二个分号是一个空语句.

空语句什么都不做.

EmptyStatement:
    ;
Run Code Online (Sandbox Code Playgroud)

执行空语句总是正常完成.