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

2022-09-01 10:25:59

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


答案 1

不,它们不会占用任何内存。编译器仅使用导入在编译时解析类名。

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

因此,您可以看到该类型被替换为它的完全限定名 ,并且字节码中没有导入语句。Stringjava.lang.String


答案 2

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

  1. 代码混乱
  2. 如果您从jar导入了一些类,后来删除了jar但没有导入,那么您可能会收到编译时错误

推荐