java - 这个小小的错别字会产生什么样的影响呢?

标签 java performance syntactic-sugar

我注意到在我的一个类上,我有以下内容:

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/

相关文章:

c++ - 如何将用户定义的文字放在 C++ 中相同类型的 constexpr 类中?

java - 有没有办法通过 Gradle 运行任意 main 方法?

java - 对 API 调用进行分组,以便 UI 可以干净地调用它们并获得响应 - 设计

java - 需要帮助处理由 java.lang.IncompatibleClassChangeError 引起的致命异常

c# - 提高C#代码效率的方法

performance - 我可以使此 Clojure 代码(计算图形二分法)更高效吗?

c# - 访问图像文件以提高性能的最佳方式

perl - Perl 中有哪些语法糖可以减少 l/rvalue 运算符与 if 语句的代码?

JavaScript请解释一下这个语法

java - 双色文字