2

我在我的 Java 代码中写了下面这三行:

ArrayList<String> QuestionID = new ArrayList<String>();
;
ArrayList<String> QuestionType = new ArrayList<String>();

它编译并运行完美,没有任何问题。

为什么会这样做?

我不明白为什么我在第二行没有收到任何警告或错误。

4

8 回答 8

12

有人认为空语句是有效的。这里的所有都是它的。允许空语句有时很有用,例如对于for具有空主体的循环。

例如,以下是查找树的根节点的方法(假设存在父链接,并且根节点没有父节点):

for (Node parent = anyChildNode; parent.getParent() != null; parent = parent.getParent())
    ; // this for loop has no body, so an empty statement takes its place
于 2012-12-31T13:43:06.490 回答
4

因为您正在编写一个empty statement,这是完全有效的。

在这里你会找到更多的解释。

从上面的链接 -

这种类型的语句的用处是有限的。我能想到的主要用途是完成循环结构所需的语句。

这是我最近使用的一个示例:

而 ( sf(++n) != i) ;

该循环将不断调用方法 sf 并增加 n 的值,直到 sf(n) 的返回值等于 i。Java 中的每个循环都必须有一些代码在循环体中执行。在这种情况下,所有必要的工作都在条件中完成,因此强制循环体是一个空语句。

虽然可能有其他(更清晰)的方式来编写这段代码,但这是可以使用空语句的示例。

于 2012-12-31T13:43:10.673 回答
4

它不仅是允许的,而且在 JLS 中有自己的部分。正如预期的那样:

空语句什么都不做。

更:

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

这意味着以下代码:

;

永远不会抛出异常。很高兴知道 ;-)

于 2012-12-31T13:51:30.337 回答
1
#if DEBUG
    #define ASSERT(_x) Assert(x)
#else
    #define ASSERT(_x)
#endif

ASSERT(test);    // Results in null statement in non-debug builds

空分号表示之前有“空语句”。那是完全有效的情况。

;意思是“什么都不做”;

关于空语句用法的好文章

于 2012-12-31T13:43:53.550 回答
1

“;” 被视为没有任何指令的行代码。

没有语法错误。

于 2012-12-31T13:44:51.007 回答
0

它是一个有效的声明,类似于指示编译器什么都不做。

于 2012-12-31T13:44:33.933 回答
0

空语句来自 C 语言的 Java,您会发现它对诸如此类的事情非常有用

strcpy(char *s, char *t) {
    while(*s++ = *t++);
}
于 2012-12-31T13:44:59.837 回答
0

Empty Semi Colon 是 JAVA 中的有效标记,它表示空语句。

于 2012-12-31T13:47:51.393 回答