理论上和实际上哪个代码更快:
class ABC{
File file;
void method(){
file = new File();
}
}
或
class ABC{
void method(){
File file = new File();
}
}
其中类ABC仅实例化一次。但是该实例的method()
被多次调用。注意:我知道在这种情况下速度实际上是无关紧要的。
答案 0 :(得分:4)
性能差异不大可能太重要。
在第一个版本中,对File
对象有一个有效的引用,直到下一次调用method
,但是上一个对象在被替换之后仍然需要进行垃圾回收。在第二个版本中,File
对象在method
完成的时刻成为孤立对象,可以进行垃圾回收。
因此,第一个版本意味着只要File
的实例存在,您将始终至少有一个不可收集的ABC
对象留在内存中。但这不太可能是一个问题,除非File
消耗不可忽略的内存量(它只包含文件的路径和名称。缓冲文件内容是BufferedReader
的工作并且你保留了很多ABC
个实例。
但是,您应该担心的是代码清晰度。一般规则是每个变量应尽可能具有最小范围。当可以是一个局部变量时,它应该是局部变量。原因是范围越小,代码可能会影响其值,这使得应用程序更容易调试。如果遇到file
突然没有达到预期值的错误,您只需要检查一个方法,而不是整个类。