一个未使用的导入是这样的 - import android.widget.RelativeLayout; 吃内存吗? 只是想知道它有多少或只是有价值? 也许这是一个愚蠢的问题,但我还没有找到答案。
答案 0 :(得分:46)
不,他们不记忆。编译器只使用导入来在编译时解析类名。
编译器将每个类名更改为完全限定名。并删除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 :(得分:11)
不,编译后编译器会删除它们。但是你可能面临两个问题
答案 2 :(得分:2)
在运行时没有影响。它可以使编译过程变得非常微小(不可测量)。但就拥有它们而言,删除它们会更好,因为它会使文件变小,并且更容易读取实际使用的导入内容。
答案 3 :(得分:1)
未使用的导入在运行时没有影响(因为字节代码中没有导入)。但是,未使用的导入会影响编译器,但不会影响编译器。
通常,仅导入所需内容将提高代码的可维护性和可读性。
答案 4 :(得分:0)
任何朗姆酒编译时间都没有影响,
但最好的方法是编写最清晰,最简单的代码,因为这样可以提高代码的可维护性,并有助于确保代码在更改后仍能正常运行。