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

时间:2011-08-19 23:16:04

标签: java import performance

之间的性能复杂程度如何?
java.io.*

java.io.File

PS。

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

7 个答案:

答案 0 :(得分:32)

在运行时0。

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

答案 1 :(得分:24)

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

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

  

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

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


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

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

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

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

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

答案 2 :(得分:10)

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

答案 3 :(得分:5)

不,对运行时性能没有影响。因为import语句是编译器指令而未转换为字节代码。正如@ Stephen C所述,只有编译时间开销。

答案 4 :(得分:3)

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

  

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

(Liang,Daniel Y."计算机,程序和Java简介。" Java编程简介。综合版。第9版.N.p。:Pearson,n.d。24.打印。)

答案 5 :(得分:0)

它们之间没有性能差异。

答案 6 :(得分:0)

如果你在EL'中有未定义的变量,那么在jsp中那么应该避免使用外卡导入语句。通配符导入将对运行时性能产生巨大影响(由于“静态字段和方法引用”处理)。