我想阅读文件并处理它们。每次迭代都会处理一个文档。
哪种代码更好?
1
BufferedReader br;
for(File f : files)
{
br = new BufferedReader(......);
......
}
2
for(File f : files)
{
BufferedReader br = new BufferedReader(......);
......
}
我的观点是哪一个在空间和速度方面更有效?
答案 0 :(得分:11)
后者在我看来更清晰。通常,更喜欢声明具有最小范围的局部变量,理想情况是在声明时初始化它们。
它不会直接影响性能 - 但会影响可读性和维护,这会影响您轻松进行 影响性能的更改。
一般来说:
答案 1 :(得分:5)
在代码优化中,很容易陷入 Win Small,Lose Big 的陷阱:每个单独的方法都可以优化到完美,但整体系统性能可能仍然是一场灾难,因为全球架构的不足之处。必须始终优化自上而下,这样一来,如果被优化版本取代,您将看到只有1%或更少的代码行实际上可以为整体性能做出贡献。
答案 2 :(得分:3)
如果您不在其他地方使用br
变量,则它们都完全相同。
注意不要在尝试纳米优化时浪费太多时间。即使字节码不同,在优化显而易见的情况下,JIT也不是那么糟糕。你不需要在使用它的块之前声明一个变量,你不应该因为它不太清楚它的用途。
答案 3 :(得分:1)
唯一的区别是br
是第二种情况是在循环范围内是局部的,而在第一种情况下它可以在循环外访问。但是请注意,即使在第一种情况下,br
ref变量也可以在outaide循环中使用,而不是你在for循环中给出的值。
否则他们就是一样的。虽然第二种情况更具可读性
答案 4 :(得分:0)
效率方面两者都相同,大部分时间都被编译为类似的字节码。
可读性方面,第二种方法更好。通常,当代码增长时,它会有很大帮助。特别是在调试时,你不必担心稍后在该块之外修改该变量。
答案 5 :(得分:0)
3
for(File f : files)
{
try( BufferedReader br = new BufferedReader(......) )
{
......
}
}