我注意到在我的一个类上,我有以下内容:
public void foo() {
int i = 4;
i = 9 + 0;;
return;
}
两个 ;;
连续。为什么这不是一个错误?应该是吗?根据我的理解,这只是编译器读取的“额外行”代码。这会浪费性能吗?另外,如果真的是空的,为什么我不能有两个;;
回来后? (例如 return;;
)?
编辑:这在实践中有什么用处?
最佳答案
Why isn't this an error?
因为该语言允许您在一行上编写单个 ;
来表示空行。您可以将任意多个 ;
彼此相邻放置。请参阅JLS §14.6 - Empty Statement .
Does this waste performance?
我不这么认为。您真的不应该担心如此微小的拼写错误的性能。 IMO,额外的分号不会出现在字节码中。因此,不会有运行时性能差异。
Also, if it really is empty, why can't I have two ;; after the return?
你不能在return
语句之后放置任何语句,因为无论如何它都不会被执行。这将是一个无法实现的声明。请参阅JLS §14.21 - Unreachable Statements .
What is a use for this in practice?
我能想到的一个用途是在您想要用作实用程序类的枚举
中。在这样的枚举中,您只想定义一些静态方法,而不是任何常量。由于在枚举中定义常量是强制性的,因此不允许在任何常量之前编写方法。在这种情况下,您可以像这样编写枚举:
enum Utility {
; // Denote the end of constant declaration. You can't omit this ';'
// Start writing your static methods.
}
关于java - 这个小小的错别字会产生什么样的影响呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501014/