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

gla*_*kou 26 java import performance

什么是性能之间的复杂性

java.io.*
Run Code Online (Sandbox Code Playgroud)

java.io.File
Run Code Online (Sandbox Code Playgroud)

PS.

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

Ale*_*yak 32

在运行时0.

两者都生成相同的字节代码

  • 编译时间如何?Java 将需要在正在使用的类中进行搜索...... (2认同)

Ste*_*n C 26

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

可能是编译使用一种或另一种形式的时间开销,但它很可能是如此之小,没有人关心它.

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

不完全是.明星导入的作用是使所有类名可用.实际的类本身并不是"包含"的......在C或c ++编程语言中.


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

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

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

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

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


Ano*_*ice 10

对运行时没有性能影响,可能会对编译时间产生影响:http: //www.javaperformancetuning.com/news/qotm031.shtml


Suh*_*pta 5

不,对运行时性能没有影响.因为importstatement是一个编译器指令而且没有转换为字节码.正如@ Stephen C所述,只有编译时开销.


小智 5

特定导入和通配符导入声明之间没有性能差异。

除非在程序中使用了该类,否则在编译时或运行时不会读取导入包中的类的信息。import 语句只是告诉编译器在哪里找到这些类。特定导入和通配符导入声明之间没有性能差异。

(Liang, Daniel Y.“计算机、程序和 Java 简介。”Java 编程简介。综合版。第 9 版。Np:Pearson,第 24 版。打印。)