【发布时间】:2015-03-26 13:25:28
【问题描述】:
我知道这听起来微不足道,但我只是想清醒一下..
考虑
for (int i = 0; i < 100; i++) {
int x=i;
System.println(i);
}
是为每次迭代创建和分配的新 int 内存,还是编译器巧妙地推断场景并只创建一次并更改其值(因为它知道这是一个循环),
而就方法签名中i的声明而言,显然只创建了一次吧?
也会
int x = 0;
for (int i = 0; i < 100; i++) {
x = i;
System.println(i);
}
真的比上面那个更有效率吗?
在java中,如果我不需要在循环外访问x,最好在循环内声明它,这是一个好习惯吗?
【问题讨论】:
-
最终这无关紧要。 JIT 将为您提供帮助,因此这两个版本最终将是等效的。至于什么是好的做法,我更喜欢你的第二种做事方式,而许多其他人更喜欢第一种......因此,这是个人喜好/口味/编码限制的问题。按此顺序。
-
不要再担心像这样的“优化”了。你的瓶颈在另一座城堡。
-
好吧,不要怀疑,做你觉得最舒服的事;这就是你对代码保持信心的方式,对吧?此外,如果您在循环中声明它,您将无法在它之外访问它。因此,这取决于您是否真的需要在循环之外访问它。是的,JIT 也可以检测到这一点。
-
正如安德森 (Matrix) 先生所说:“永远不要派人去做机器的工作”。 Java JIT 肯定会处理这种情况,并将变量放在寄存器中。
标签: java performance loops scope declaration