java 为什么它不工作?有人能解释一下内存分配,静态/非静态,全局/局部变量/堆栈中使用的deepcopy吗

vuktfyat  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(85)

这是一个简单的递归函数,可以反向打印数组元素。
当我调用print语句上面的函数时,它给我的索引是-1outOfBoundException。当我在调用函数之前打印时,它似乎工作正常。我认为这与变量的深度复制有关,但我不知道正确的解释。有人能给我一个恰当的答案吗?

int[] arr = {1,2,3};
 int n = arr.length;
 print(arr,n-1);

这会导致错误:

public static void print(int[] arr, int n)
    {
        if(n<0)
            return;

        print(arr,--n);
        
        System.out.println(arr[n]);
    }

这不会:

public static void print(int[] arr, int n)
    {
        if(n<0)
            return;
        
        System.out.println(arr[n]);

        print(arr,--n);
    }
b4wnujal

b4wnujal1#

键入--n与键入n--不同。
第一个将递减值,然后读取值。
而第二个将读取该值,然后将其递减。
关于Java一元运算符的更多信息可以在这里找到。
Assignment, Arithmetic, and Unary Operators - The Java Tutorials (Oracle)

相关问题