为何变量交换后外部未生效?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); } }
关键修改点说明:
- 去掉swap的参数:原来的参数a、b会覆盖类的成员变量,导致你修改的只是局部变量,而非对象的成员变量。现在直接用
this.a、this.b明确指定访问类的成员变量(其实这里不加this也可以,但加上更清晰,避免混淆)。 - 去掉display的参数:同样,直接打印类的成员变量,确保输出的是交换后的值。
- main中调用无参方法:这样方法会直接操作sw对象的成员变量,交换后的值会被保留在对象中,display就能正确打印结果。
运行这段代码后,你会看到swap方法内和display方法输出的都是交换后的值,外部的对象成员变量也完成了真正的交换。
内容的提问来源于stack exchange,提问作者Isha S
相关产品推荐
相关产品推荐

