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

为何变量交换后外部未生效?Java Swap类成员变量配置问题

解决Java中成员变量交换不生效的问题

你遇到的核心问题是swap方法里的a、b是局部参数,和类的成员变量重名,而且Java是值传递,修改局部参数不会影响外部的成员变量。要让成员变量真正交换,得直接操作类的成员变量,不用方法参数来覆盖它们。

修改方案如下:

  • 去掉swap方法的参数,直接操作Swap类的成员变量a和b
  • 去掉display方法的参数,直接打印类的成员变量
  • main方法里调用swap和display时不用传参,让方法直接访问对象的成员变量

修改后的完整代码:

public class SwapNumbers{
    public static void main(String args[]) {
        Swap sw = new Swap();
        int a = 10;
        int b = 65;
        sw.a = a;
        sw.b = b;
        // 直接调用无参的swap方法,操作成员变量
        sw.swap();
        // 直接调用无参的display方法,打印成员变量
        sw.display();
    }
}

class Swap{
    int a, b;
    // 无参swap方法,直接操作类的成员变量
    void swap(){
        int temp = this.a;
        this.a = this.b; 
        this.b = temp;
        // 这里打印的也是成员变量
        System.out.println("swap方法内的a: " + this.a);
        System.out.println("swap方法内的b: " + this.b);
    }
    // 无参display方法,直接打印成员变量
    void display(){
        System.out.println("最终的a: " + this.a);
        System.out.println("最终的b: " + this.b);
    }
}

关键修改点说明:

  1. 去掉swap的参数:原来的参数a、b会覆盖类的成员变量,导致你修改的只是局部变量,而非对象的成员变量。现在直接用this.a、this.b明确指定访问类的成员变量(其实这里不加this也可以,但加上更清晰,避免混淆)。
  2. 去掉display的参数:同样,直接打印类的成员变量,确保输出的是交换后的值。
  3. main中调用无参方法:这样方法会直接操作sw对象的成员变量,交换后的值会被保留在对象中,display就能正确打印结果。

运行这段代码后,你会看到swap方法内和display方法输出的都是交换后的值,外部的对象成员变量也完成了真正的交换。

内容的提问来源于stack exchange,提问作者Isha S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:17:41