【问题标题】:Java import can be slow? [duplicate]Java导入会很慢吗? [复制]
【发布时间】:2011-01-09 14:44:02
【问题描述】:

import package.* 是否比 import package.MyClass 慢? 如果是,在哪个场景中:运行时还是编译?

【问题讨论】:

标签: java


【解决方案1】:

import package.* 在编译时可能会变慢。如果该包中定义了很多东西,它也会减慢您的 IDE。

在运行时,there's no difference

【讨论】:

  • {citationrequired} - 你有任何证据表明它在编译时变慢了吗?
  • 你的意思是{{citation needed}} :P 不,我手头没有这样的证据。不过,我已经直接注意到 IDE 速度下降。
  • 哦,我的引用刚刚出现:stackoverflow.com/questions/1983435/…
【解决方案2】:

这发生在编译期间。如果存在速度差异,则可以忽略不计。

【讨论】:

    【解决方案3】:

    如果导入的包异常巨大,我猜通配符导入可能会减慢编译速度,但实际上,它可以忽略不计。

    导入语句在运行时无效。无论使用通配符还是显式导入,编译后的类都是相同的。

    但是,通配符导入通常不被鼓励,因为它们会使代码难以阅读;当以这种方式导入多个包时,人类读者不清楚一个类型来自哪个包。

    【讨论】:

    • 不鼓励导入通配符的其他原因:javadude.com/articles/importondemandisevil.html
    • 重新链接:确实如此,我自己也被这件事烫伤了。我在导入 java.util.* 时也被烧了几次,所以我可以使用 Date,然后添加 java.sql.*,反之亦然。这与链接描述的问题并不完全相同——当我添加导入时出现错误,而不是当其他一些糟糕的傻瓜检查我的代码时——但根本问题是相同的:你被一个模棱两可当您不关心其中一个选项时参考。也就是说,我必须承认我通常只是不担心它,并使用 import something.* 每当我想要超过 3 时。
    • 如果您将鼠标悬停在声明中的类名上,现代 IDE(甚至一些古老的 IDE)会告诉您该类在哪个包中。我看不出这如何使您的代码可读性降低。如果你在不同的包中有两个同名的类,为了减少混淆,你应该在对象声明语句中使用完整的包名,但只有当你在一个类中使用两个同名的类时才需要这样做。
    【解决方案4】:

    因为编译器做了一些优化,运行时不会变慢。 它在编译时可能会更慢,但在 99,99% 的情况下,您可能并不在意......

    【讨论】:

    • 这并不是真正的优化,只是编译器将完全限定名编译到.class文件中(import是编译器指令)。
    猜你喜欢
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    相关资源
    最近更新 更多