You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何通过call方法修改int类型变量的值

问题原因

Java的参数传递采用值传递机制:

  • 对于int、char等基本数据类型,传递的是变量值的副本,方法内部对副本的修改完全不会作用到原变量上
  • 你之前能通过方法修改数组内容,是因为数组属于引用类型,传递的是堆内存中数组对象的引用副本,两个引用指向同一个存储对象,修改对象的内容会同步生效,和基本类型的传递逻辑有本质区别
可行的解决方法

方法1:接收方法的返回值赋值给原变量

你当前的call方法已经返回了修改后的值,只需要把返回值重新赋值给main方法里的n即可:

import java.util.*;

public class Main {
    private static int call(int n) {
        n = n - 1;
        return n;
    }
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = 5;
        // 接收返回值覆盖原变量
        n = call(n);
        System.out.println(n); // 输出4
    }
}

方法2:用长度为1的基本类型数组包装(适合void返回值场景)

参考你修改数组的思路,把int放到长度为1的数组里传递即可:

import java.util.*;

public class Main {
    private static void call(int[] nArr) {
        nArr[0] = nArr[0] - 1;
    }
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int[] nArr = {5};
        call(nArr);
        System.out.println(nArr[0]); // 输出4
    }
}

方法3:使用可变引用类型包装类

可以用java.util.concurrent.atomic.AtomicInteger这个可变的整数包装类实现修改:

import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;

public class Main {
    private static void call(AtomicInteger n) {
        // 原子减1操作
        n.decrementAndGet();
    }
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        AtomicInteger n = new AtomicInteger(5);
        call(n);
        System.out.println(n.get()); // 输出4
    }
}

内容的提问来源于stack exchange,提问作者Deepak Silver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:39:00