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

IT小君   2021-12-08T04:18:26

我不小心写了一个末尾有两个分号的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将分号和其他字符视为不同?

评论(5)
IT小君

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

2021-12-08T04:18:26   回复
IT小君

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

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

public int method() {
   return 1;;
}

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

2021-12-08T04:18:26   回复
IT小君

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

空语句什么也不做。

EmptyStatement:
    ;

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

2021-12-08T04:18:26   回复
IT小君

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

2021-12-08T04:18:27   回复
IT小君

分号结束句子。

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

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

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

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

2021-12-08T04:18:27   回复