为什么我在写';'时没有收到任何警告或错误?

问题描述 投票:2回答:8

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

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

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

它为什么这样做?

我无法理解为什么我在第二行没有收到任何警告或错误。

java syntax format
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

4
投票

因为你正在写一个完全有效的empty statement

Here你会找到更多的解释。

从以上链接 -

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

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

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

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

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


4
投票

不仅允许,而且它有its own section in the JLS。正如所料:

空语句什么都不做。

更:

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

这意味着以下代码:

;

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


1
投票

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

没有语法错误。


1
投票
#if DEBUG
    #define ASSERT(_x) Assert(x)
#else
    #define ASSERT(_x)
#endif

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

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

;的意思是“什么都不执行”;

Good article关于空语句的用法


0
投票

它是一个有效的语句,类似于指示编译器什么也不做。


0
投票

空语句从C来到Java,你可以发现它非常有用

strcpy(char *s, char *t) {
    while(*s++ = *t++);
}

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.