Java 创建新变量和重用旧变量哪个更快?

Java 创建新变量和重用旧变量哪个更快?,java,performance,variables,Java,Performance,Variables,为java编程语言创建新变量或重用旧变量哪个更快? 范例 案例1:创建 int x = 5; int var = 1; 案例2:重复使用旧的 int x = 5; x = 1; “哪个更快?”是个错误的问题。“哪个算法正确?”是正确的问题 通常,只有当变量需要保存新的基元值或指向其他对象时,才能重用该变量,因为它是表示当前状态的变量。如果变量被重新分配来保存表示不同内容的内容,则不应这样做,而应使用新变量 Sosum+=项目是变量sum的有效重用。但是 foo = 42; buyQuanti

为java编程语言创建新变量或重用旧变量哪个更快? 范例

案例1:创建

int x = 5;
int var = 1;
案例2:重复使用旧的

int x = 5;
x = 1;
“哪个更快?”是个错误的问题。“哪个算法正确?”是正确的问题

通常,只有当变量需要保存新的基元值或指向其他对象时,才能重用该变量,因为它是表示当前状态的变量。如果变量被重新分配来保存表示不同内容的内容,则不应这样做,而应使用新变量

So
sum+=项目
是变量
sum
的有效重用。但是

foo = 42;
buyQuantity(foo);
 ...
foo = 23;
sendMessages(foo);
不是对
foo
的有效重用

一个相关但不同的问题是是否应该重用对象来保存新值。通常不会。例如:

Foo foo = new Foo();
for (int ix = 0; ix < MAX_ITERS; ++ix )
{
    foo.clear();
    foo.fill();
    process(foo);
}
Foo-Foo=new-Foo();
对于(int-ix=0;ix
比:

for (int ix = 0; ix < MAX_ITERS; ++ix )
{
    Foo foo = new Foo();
    foo.fill();
    process(foo);
}
for(int-ix=0;ix
我不确定其中一个是否比另一个快,尽管底部可能会占用堆栈上稍少的空间。一般来说,您应该避免不必要地声明新变量,这通常是一个很好的实践。如果它将用于不相关的事情,我肯定会创建一个新变量。始终为变量指定有意义的名称,并在整个应用程序中保持这种意义。就表现而言,他们将是相同的,因为他们都做了一项任务。(如果它们是对象,它们都可以用于垃圾收集)如果代码的性能受到变量分配的影响,它们就不会完全相同,因为第一个会为堆栈中的指针/原语分配新内存(这几乎需要0个时间,但实际上需要时间),你可能使用了错误的语言。如果你在问这个问题,那是因为你试图对差异进行基准测试(我希望你在问之前至少这样做了)。如果你找不到明显的区别,那么这可能意味着问题的答案并不重要。您最好将时间花在使代码更具可读性和可维护性上,而不是专注于无法检测到的微优化。您能否详细说明一下
foo.clear()
为什么不好?你有点掩饰了。谢谢你的回答,但我不关心算法的修正,我只是想知道哪个执行得更快?新变量或重复使用旧变量?@4castle,只有在循环外部使用时,循环外部范围内的变量才是正确的。如果它只在循环内使用,那么它的作用域应该在循环内。这是一个范围正确性的问题。此外,将引用对象保留太久可能会将其提升到终身一代,这通常不如将其保留在快速收集年轻一代的过程中那么理想。正如我所说的,Dalal Alghomlas,这实际上不是一个有用的问题,正如@sstan所暗示的,您的基准是唯一知道的方法。更快地得到错误答案不是正确的编码方式,也不会更快地导致更多的bug。出于好奇,你的基准测试显示了什么?