在Java中,未使用的导入声明是否会占用内存?

像这样的未使用的导入 – 导入android.widget.RelativeLayout; 吃内存? 只是想知道它有多少或只是有价值? 也许这是一个愚蠢的问题,但我还没有找到答案。

不,他们不记忆。 编译器只使用导入来在编译时解析类名。

编译器将每个类名更改为完全限定名。 并删除import语句。 因此,import语句不会使其成为字节代码。

可以提出通配符导入的唯一问题是命名空间冲突,即,当在两个不同的包中定义两个具有相同名称的类型时,使用通配符导入这些包将导致所使用的类型的名称冲突。


要查看编​​译器如何替换import语句,可以使用javap命令生成类的字节代码。 考虑以下代码:

 import java.util.*; import java.util.regex.*; public class Test { public static void main(String[] args) { } } 

只需编译上面的代码,并使用以下命令检查字节代码:

 javap Test 

它给出了以下输出:

 public class Test { public Test(); public static void main(java.lang.String[]); } 

因此,您可以看到String类型被替换为完全限定名称java.lang.String ,并且字节代码中没有import语句。

不,编译后编译器会删除它们。 但是你可能面临两个问题

  1. 代码杂乱
  2. 如果你从jar导入一些类,后来删除了jar而不是import,那么你可能会遇到编译时错误

在运行时没有影响。 它可以使编译过程变得非常小(不可测量)。 但就拥有它们而言,最好删除它们,因为它会使文件变小,并且更容易读取实际使用的导入内容。

未使用的导入在运行时没有影响(因为字节代码中没有导入)。 但是,未使用的导入会影响编译器,但不会影响编译器。

通常,仅导入所需内容将提高代码的可维护性和可读性。

任何朗姆酒编译时间都没有影响

但最好的方法是编写最清晰,最简单的代码,因为这样可以提高代码的可维护性,并有助于确保代码在更改后仍能正常运行。

文档: 性能的最佳实践