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

Ken*_*iro 27 java import performance

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

Roh*_*ain 46

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

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

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


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

import java.util.*;
import java.util.regex.*;

public class Test {
    public static void main(String[] args) {

    }
}
Run Code Online (Sandbox Code Playgroud)

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

javap Test
Run Code Online (Sandbox Code Playgroud)

它给出了以下输出:

public class Test {
  public Test();
  public static void main(java.lang.String[]);
}
Run Code Online (Sandbox Code Playgroud)

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


kos*_*osa 11

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

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