根据我的科学Java实验,int x = 0;
相当于int x = 0;;
,相当于int x = 0;;;;;;;;;;;;;;;
答案 0 :(得分:22)
额外的分号被视为空语句。空语句什么都不做,所以这就是为什么Java不会抱怨它。
答案 1 :(得分:18)
正如Jake King所写的那样,你可以产生空语句,在循环中什么都不做:
while (condition);
但要明白,你会写
while (condition)
;
甚至更好:
while (condition)
/** intentionally empty */
;
正如MichaelKjörling在评论中指出的那样,甚至更好,
while (condition)
{
/** intentionally empty */
}
更常见的是,你会在无限循环的for语句中看到它:
for (;;)
或只有一个空陈述
for (start;;)
for (;cond;)
for (;;end)
你可以做的另一件事是,编写一个程序,一个用一个,一个用2个分号:
public class Empty
{
public static void main (String args[])
{
System.out.println ("Just semicolons");;
}
}
编译它,并运行list字节代码的大小(identic)并在字节码上执行md5sum(identic)。
因此,在语义没有改变的情况下,它显然已经被优化了,至少对于1.6-Oracle编译器我可以这么说。
答案 2 :(得分:8)
是的,它们是空的陈述,根本不做任何事情。它们由编译器优化,但在某些情况下,这个空语句实际上做了一些事情,与一组空括号({}
)做同样的事情。它们继承自C语法,但它们在Java中几乎没有用处。在C中,有时做这样的事情很有用:
while (condition);
这将循环直到condition
为false,从而阻止代码进展。但是,这在现代代码中是不鼓励的,并且不应该真正用于Java。但是,空语句 计算为一个语句,只是一个无用的语句,所以构造如下:
if (condition);
doSomething();
....可能会导致一些莫名其妙的结果。 if
语句将调用空语句,而不是方法,因此始终将调用该方法。请记住一点需要注意。
答案 3 :(得分:0)
有一点需要注意的是,如果你这样做:
public int foo()
{
return(0);;
}
编译器会/可能会抱怨无法访问的语句,因为返回后会有一个空语句。至少使用Oracle的1.6 sdk确实如此。