通配符导入和所需类导入之间的性能差异

2022-09-01 04:08:07

两者之间性能的复杂性是多少

java.io.*

java.io.File

附言。

我知道第一个将包括每个文件,下一个文件仅包含选定的类文件。java.io.*


答案 1

在运行时 0.

两者都生成相同的字节码


答案 2

导入在编译时解析为完全限定的名称。没有运行时性能差异。如果您查看生成的字节码,它们将是相同的。

使用一种或另一种形式的编译时开销可能很小,但它可能非常小,以至于没有人应该注意到它,更不用说关心它了。

我知道第一个将包括 java.io.*中的每个文件,下一个文件仅包含选定的类文件。

不完全是。星形导入的作用是使所有类名都可用。实际的类本身并不“包括在内”...在C或C++编程语言的意义上。


许多人使用显式导入而不是通配符导入的真正原因是:

  • 显式导入清楚地记录了类直接使用的外部类,前提是不要在代码中保留冗余导入。

  • 显式导入可避免在导入包含具有相同(简单)类名的类的两个包时出现名称冲突问题。

  • 显式导入可避免有人将新类添加到已导入通配符的某个包中的脆性问题。由于名称冲突,这可能会导致以前用于编译的代码中出现新的编译错误(请参阅前面)。

现代 IDE 具有加速器、代码免除和其他功能,可帮助您在使用显式导入时控制导入。


推荐