我知道需要分号才能结束语句,就像在这段代码中一样:
public class Main{
public static void main(String[] args){
System.out.println("blah blah blah and stuff")
}
}
println语句结束时需要分号,否则程序将无法编译。
最近,我偶然在println语句的末尾放了两个分号:
System.out.println("blah blah blah and stuff");;
我注意到了,所以我开始在程序中的任何地方放置分号
public class Main{;;;;;;
public static void main(String[] args){;;;;;;;;
System.out.println("blah blah blah and stuff");;;;;;
};;;;;;
};;;;;
此代码编译,打印字符串,没有错误或意外结果。我已经搜索了为什么编译器似乎只是忽略了这些分号,但从未找到任何特别提及的内容。那么,为什么这些分号不会产生语法错误?
答案 0 :(得分:8)
这被称为empty statement,它是有效的。
空语句什么都不做。
它没有多少用途
while (checkCondition()) // may have some side effects
;
答案 1 :(得分:2)
分号用于终止表示语句结束的语句
所以当你说
时int i=5;
;
它只是意味着这是一个空的陈述。虽然没有使用它,但它不被视为错误,因为它只是表示一个空的语句结束。
答案 2 :(得分:1)
这就是编译器的工作原理。
当编译器编译你的代码时,它遵循一些叫做Context Free Grammar的规则,它对不同的语言有不同的定义。
在C编程语言中,可能存在诸如
之类的规则声明 - > (optional_other_stuff)+';'
表示每个语句必须以分号结尾。
换句话说,缺少分号会使编译器无法识别该语句,但额外的分号仅被视为编译器的空语句
答案 3 :(得分:0)
其empty statement
,当您编译该类时,它将从中删除。
所以没有区别。