Java 实例和迭代。哪一个更好?
我想阅读文件并处理它们。每个迭代处理一个文档 哪种代码更好 一, 二,Java 实例和迭代。哪一个更好?,java,performance,iteration,instantiation,Java,Performance,Iteration,Instantiation,我想阅读文件并处理它们。每个迭代处理一个文档 哪种代码更好 一, 二, 我的观点是,哪一个在空间和速度方面更有效?如果不在其他地方使用br变量,它们完全相同 小心不要浪费太多时间尝试纳米优化。即使字节码不同,JIT在优化代码时也不是那么糟糕。您不需要在使用变量的块之前声明变量,也不应该这样做,因为它使变量的用途变得不那么清楚。在我看来,后者更清楚。一般来说,您更喜欢使用最小的作用域来声明局部变量,理想的情况是在声明时初始化它们 它不会直接影响性能,但会影响可读性和维护性,这会影响您进行更改的难易
我的观点是,哪一个在空间和速度方面更有效?如果不在其他地方使用
br
变量,它们完全相同
小心不要浪费太多时间尝试纳米优化。即使字节码不同,JIT在优化代码时也不是那么糟糕。您不需要在使用变量的块之前声明变量,也不应该这样做,因为它使变量的用途变得不那么清楚。在我看来,后者更清楚。一般来说,您更喜欢使用最小的作用域来声明局部变量,理想的情况是在声明时初始化它们 它不会直接影响性能,但会影响可读性和维护性,这会影响您进行更改的难易程度,从而影响性能 一般而言:
- 制定您的绩效和行为要求(以及如何测试两者)
- 编写最简单、最干净的代码,实现您想要的行为
- 看看它是否符合您的性能要求
- 如果没有,分析问题所在,并做出“最不干净”的改变以改善情况。(这可能意味着进行设计更改,而不是进行微观优化。)
- 起泡、冲洗、重复,直到得到满足性能要求且尽可能干净的代码
在代码优化中,很容易陷入小赢大输的陷阱:每个方法都可能被优化到完美,但由于全局架构的不足,整体系统性能可能仍然是一场灾难。必须始终自上而下进行优化,这样做时,您会发现,如果用优化版本替换,实际上只有1%或更少的代码行可以提高总体性能。从效率角度看,两者都是相同的,大多数情况下都编译成类似的字节码
可读性方面,第二种方法更好。通常,当代码增长时,它会有很大帮助。特别是在调试时,您不必担心稍后在该块之外修改该变量。唯一的区别是
br
第二种情况是循环范围内的局部变量,而第一种情况下,它可以在循环外访问。但请注意,即使在第一种情况下,br
ref变量也会在outaide循环中可用,而不是在for循环中提供的值
否则他们就一模一样了。尽管第二种情况更具可读性3
for(File f : files)
{
try( BufferedReader br = new BufferedReader(......) )
{
......
}
}
@FedericoCristina标题更新(y)打印此答案并将其挂在我的隔间中。如果我回忆正确,1)不正确:
br
在第二个示例中循环结束后,一旦离开定义的范围,将不再定义它。这使得维护更容易,因为您不会意外地重用变量。@izkata 1)与维护的差异无关,而是与运行时效率有关。编译器很容易检测到br
的使用以for
循环结束,并将其视为在内部声明。
for(File f : files)
{
BufferedReader br = new BufferedReader(......);
......
}
for(File f : files)
{
try( BufferedReader br = new BufferedReader(......) )
{
......
}
}