我想知道我是否import在我的java程序中包含了很多,它是否会影响我的代码的性能(例如,程序会更慢)?importJava中的逻辑与includeC中的逻辑相同吗?
aio*_*obe 68
它会影响我的代码的性能(例如,程序会更慢)?
不,它不会影响代码的性能.
二进制文件(类文件)的大小不会增加,因为没有使用任何剪切和粘贴机制实现导入.
它仅仅是一种避免必须编写的语法糖
java.util.List<java.math.BigInteger> myList =
new java.util.ArrayList<java.math.BigInteger>();
Run Code Online (Sandbox Code Playgroud)
这是一个小测试,证明了这一点:
aioobe@e6510:~/tmp$ cat Test.java
import java.util.*;
public class Test {
public static void main(String[] args) {
List<Integer> myInts = new ArrayList<Integer>();
}
}
aioobe@e6510:~/tmp$ javac Test.java
aioobe@e6510:~/tmp$ md5sum Test.class
523036e294b17377b4078ea1cb8e7940 Test.class
Run Code Online (Sandbox Code Playgroud)
(修改Test.java)
aioobe@e6510:~/tmp$ cat Test.java
public class Test {
public static void main(String[] args) {
java.util.List<Integer> myInts = new java.util.ArrayList<Integer>();
}
}
aioobe@e6510:~/tmp$ javac Test.java
aioobe@e6510:~/tmp$ md5sum Test.class
523036e294b17377b4078ea1cb8e7940 Test.class
Run Code Online (Sandbox Code Playgroud)
Java中的导入背后的逻辑是否与C中的包含相同?
不,a #include是预处理程序指令,并使用剪切和粘贴机制实现.
Ste*_*n C 22
...它会影响我的代码的性能吗?
没有丝毫.实际上,编译的类(使用或不使用)将是相同的.导入只是语法糖,允许您在源代码中使用较短的名称作为外部类或(使用静态导入)类成员.换句话说,它允许你写:
Map map = new HashMap();
Run Code Online (Sandbox Code Playgroud)
代替
java.util.Map map = new java.util.HashMap();
Run Code Online (Sandbox Code Playgroud)
就这些.
编译时间可能存在很小的(微小的)差异.但是,AFAIK,类似的东西import java.util.*;不会导致java.util编译器加载所有类.相反,它只是将类的名称添加到符号表中.
话说回来:
.*)可能导致意外冲突.Java中的导入背后的逻辑是否与C中的包含相同?
不它不是.
AC/C++ include指令将任意1个 C/C++"代码"注入源流.这可以包括声明和可执行语句......这可能会影响性能,执行内存占用量和可执行文件的大小.
1 - 也就是说,无论include文件的作者选择放入文件中.它可以是简单的方法和类"签名",但它也可能是宏,代码和其他有影响的声明.您必须检查文件以确定.
cor*_*iKa 13
它对程序的运行速度没有影响.
它可能会对程序的~compat_time速度产生影响.
如果您import java.util.*;将所有java.util包加载到编译器中,这可能会增加.*整个包用于单次使用的编译时间(尽管如果它将成为一个问题,您应该执行一些分析.)
除了潜在的编译时间问题,不要忘记考虑可读性问题.一般来说,我(以及我与之交谈的人)发现import pack.age.Class;比import pack.age.*;在讨论这个问题之前与你的团队谈话更具可读性.
但它背后的逻辑#include与代码有很大不同,也没有膨胀.当您包含依赖关系jar时,您可能会得到更多必要但这可能不是一个大问题.
| 归档时间: |
|
| 查看次数: |
12233 次 |
| 最近记录: |