【问题标题】:Variable not updating outside the function [duplicate]变量不在函数外部更新[重复]
【发布时间】:2021-10-05 11:55:49
【问题描述】:

为什么函数内部的变量没有更新,但是当我在它外面打印它时,它不起作用。但是如果我对 ArrayList 做同样的事情,ArrayList 就会更新。为什么会这样???

public int perfectSum(int arr[],int n, int sum) 
    { 
        // Your code goes here
        int i = 0;
        helper(arr,sum,0,0,i);
        return i;
    } 
    void helper(int arr[], int target, int sum, int idx, int i){
        if(idx == arr.length){
            if(sum == target){
                i++;
            }
            return;
        }
        
        helper(arr, target, sum+arr[idx], idx+1, i);
        helper(arr, target, sum, idx+1, i);
    }

【问题讨论】:

  • "Java对象变量只是指向内存堆中真实对象的简单引用。因此,即使Java通过值向方法传递参数,如果变量指向对象引用,真实对象也会也变了。” arraylist 是一个对象。
  • “如果我对 ArrayList 执行相同操作,则 ArrayList 将得到更新”— 与 arraylist 相同的是在 arraylist 上调用 ++,这将无法编译。但是,如果您重新分配了一个 arraylist 变量,您将观察到您对 int 变量所做的相同事情,即在一种方法中更新局部变量不会改变另一种方法中的局部变量。。跨度>

标签: java dsa


【解决方案1】:

您需要了解原始类型和引用类型之间的区别,当您创建数组时,您定义的变量仅包含堆中实际对象的地址,如果您创建了原始类型,则将实际值存储在其中。

对于 intint[],您正在获取变量内容的副本,但对于数组情况,您可以获得地址的副本,因此您可以操作对象并更改堆中的实际对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多