这些方法之间有什么实际区别吗?(内存、GC、性能等?)
while...{
Object o=new Object();
...
o=new Object();
...
}
和
Object o;
while...{
o=new Object();
...
o=new Object();
...
}
这些方法之间有什么实际区别吗?(内存、GC、性能等?)
while...{
Object o=new Object();
...
o=new Object();
...
}
和
Object o;
while...{
o=new Object();
...
o=new Object();
...
}
来自有效的 Java 第 2 版:
最小化局部变量范围的最强大的技术是在第一次使用它的地方声明它。如果一个变量在使用之前就被声明了,那就是混乱了——另外一件事情会分散试图弄清楚程序做什么的读者的注意力。到使用变量时,读者可能不记得变量的类型或初始值。
过早地声明一个局部变量不仅会导致其范围过早地扩展,而且会导致其结束得太晚。局部变量的范围从声明它的点延伸到封闭块的末尾。如果变量在使用它的块之外声明,则在程序退出该块后它仍然可见。如果一个变量在其预期使用区域之前或之后被意外使用,后果可能是灾难性的。
换句话说,性能(CPU,内存)的差异与您的情况无关。更重要的是程序的语义和正确性,这在您的第一个代码示例中更好。
在您的第一个示例中,o
将在您的 while 循环完成后超出范围。
现在,如果您实际上并未o
在 while 循环之外使用(即使您将它引用的对象加载到不同的结构中),这很好,但您将无法o
在循环之外访问
此外,这只是挑剔,但这些都不会编译,因为你声明Object o
了两次。
在选项 1 的情况下,当循环结束时,对象将有资格进行 GC,而在选项 2 中,对象将持续到方法结束。