我知道每个递归调用都有自己的数据副本存储在堆栈的保留区域中。
但是,递归调用如何访问主要声明的共享公共静态数据?例如?
这些数据是堆栈还是堆?
答案 0 :(得分:1)
递归方法(如果它是否递归,它并不重要)可以访问它所属的类的静态成员,以及非静态成员(假设递归方法不是静态的)。这些数据在堆中。
但是,如果你想在递归方法中改变标题中提到的数组,我建议你将数组作为参数传递给每个递归调用。
答案 1 :(得分:1)
简而言之:静态字段甚至方法都存储在堆上。有关更深入的信息,请参阅this question。
您可以从递归方法直接访问静态字段,因为您可以使用任何非静态字段或局部变量。因为一次只有访问器(在读/写访问的意义上和多线程相比),所以它是安全的。
如果您想要递归方法线程安全,您可能希望将字段(或Holder类)作为参数传递。