15

我不小心写了一个结尾有两个分号的java语句。java 编译器没有显示任何错误并且它运行。

代码:

System.out.println("Length after delete the text is "+name.length());;

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

这个说法:

System.out.println("Length after delete the text is "+name.length());)

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

4

5 回答 5

38

因为双分号不被视为双分号,而是作为分号加一个空语句。一个什么都不做的空语句不是错误。

于 2012-03-03T13:25:27.847 回答
18

正如其他答案所说,通常第二个分号被解释为空语句,在任何允许语句的情况下都是允许的。

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

public int method() {
   return 1;;
}

当编译器确定某个位置不可到达时(这在 JLS 中准确定义,但包括紧接在 、 和 之后的位置return),break不允许有任何语句,甚至是空语句。continuethrow

于 2012-03-03T17:02:59.077 回答
11

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

空语句什么都不做。

EmptyStatement:
    ;

空语句的执行总是正常完成。

于 2012-03-03T13:29:05.607 回答
1

;本身是一个空运算符,因此在原始情况下您实际上有两个运算符。

于 2012-03-03T13:25:54.510 回答
1

分号结束句子。

System.out.println("Length after delete the text is "+name.length());;

第二个分号表示句子为空。

System.out.println("Length after delete the text is "+name.length());)

是错误的,因为你试图完成一个未完成的句子。

于 2012-03-03T13:26:37.023 回答