class X
{
public static void func(int timesLeft, Object obj)
{
if (timesLeft-- == 0)
return;
System.out.println(obj);
func(timesLeft, obj);
}
}
在此代码中,很明显参数timesLeft
发生了变化,但是obj
对于所有函数调用都是相同的。 obj
是否为每个调用传递并放在堆栈框架上,还是编译器是否每次都注意到它是同一对象,并进行了一些优化,使得所有调用都为第二个参数访问相同的位置({{1 }}),而不是每个调用都有自己的参数?
编辑:
这个例子只是一个简化的例子。在某些情况下,处理某些数据结构需要递归。例如探索图。例如,如果我想在图上应用dfs,我想跟踪访问的节点(也许使用obj
)。由于此布尔数组特定于该函数,并且未在其他地方使用,因此将其存储为字段或其他内容没有任何意义。最好的办法可能是将其传递给每个呼叫。因此,我想知道编译器是否以类似更简单的方式优化了诸如此类的东西。