之间的任何细微差别 ;或 {} 来表示空语句?

2022-09-03 09:00:57

我理解语句终止符符号,如果单独使用,则表示空语句。此外,“空循环体”可以是一个有用的编程构造,并且是使用 null 语句创建的。;

看看下面的 while 语句,在第 2 行,我决定用一对背靠背的大括号替换终止符号。代码编译并运行正常。这是否意味着 Java 编译器将空代码块(由“空”大括号表示)替换为基于 null 的语句?;{}{};

如果Java所做的略有不同,那么在这两种情况下,生成的字节码会是相同的吗?(很抱歉,我无法检查此自动取款机。我是Java的新手,我还没有必要的知识来显示和检查字节码)。

int i=0,j=100;

// Either a terminating ; symbol or {} braces work to make an "empty loop body".
while (++i < --j) {}  
System.out.println("The midpoint between 0 and 100 is " +i);  // Midpoint is 50.

答案 1

两者在语义上是相同的,编译器在这两种情况下都会生成相同的代码。如果您尝试故意包含一个空的循环正文,请更清楚地表明它是故意的,而不仅仅是一个离群的分号。您应该始终显式注释此类情况,并且通常最好重写代码以完全避免忙等待循环。{}


答案 2

在这两种情况下,将生成相同的字节码。

我更喜欢使用而不是,后者在和循环中使用时有时会有拼写错误的感觉。{ };forwhile

如果我有这个代码:

while(i-- < j++);
System.out.println("Wild World");

我想也许这是一个错别字,不应该在这里。;

但是如果我有:

while(i-- < j++) { }
System.out.println("Wild World");

我知道这是有原因的。


推荐