29

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

4

5 回答 5

48

不,他们不带任何记忆。编译器仅使用导入在编译时解析类名。

编译器将每个类名更改为完全限定名。并删除导入语句。因此,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[]);
}

因此,您可以看到Stringtype 被替换为它的完全限定 name java.lang.String,并且字节码中没有 import 语句。

于 2013-08-09T18:54:52.830 回答
12

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

  1. 代码混乱
  2. 如果您从 jar 导入一些类,然后删除了 jar 但没有导入,那么您可能会收到编译时错误
于 2013-08-09T18:55:38.650 回答
2

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

于 2013-08-09T18:56:21.487 回答
1

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

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

于 2013-08-09T18:55:28.627 回答
0

不会影响任何 rumtime 编译器时间

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

文档:性能最佳实践

于 2017-01-02T10:47:02.690 回答