如何在递归调用之间共享数据(数组)?

How to share data (array) between recursive calls?

我知道每个递归调用都有自己的数据副本存储在堆栈中的保留区域中。

然而,递归调用如何访问共享的 public 静态数据,例如在 main 中声明的?

这个数据是在栈中还是在堆中?

递归方法(是否递归并不重要)可以访问它所属的class的静态成员,以及非静态成员(假设递归方法不是静止的)。此数据在堆中。

但是,如果您希望在递归方法中改变标题中提到的数组,我建议您将数组作为参数传递给每个递归调用。

简而言之:静态字段甚至方法都存储在堆。有关更深入的信息,请参阅 this question

您可以从递归方法直接访问静态字段,就像您对任何非静态字段或局部变量所做的那样。因为一次只有一个访问器(在 read/write 访问的意义上,与多线程相比),所以它是安全的。

如果您希望递归方法线程安全,您可能希望将字段(或 Holder class)作为参数传递。