Java中为何passenger值未被方法修改,station值却可改变?
问题分析:passenger值无法修改的原因
核心原因:Java基本类型的「值传递」特性
Java中,基本数据类型(比如int)作为方法参数传递时,传递的是变量的副本而非原变量本身。
看你的代码:
- 调用
passengerChange(station, passenger)时,passenger的当前数值会被复制给方法内的参数p。你在passengerChange里对p的所有修改,都只作用于这个副本,不会影响外部的静态变量passenger,所以输出里passenger始终是初始值0。 - 而
station的值能改变,是因为你在for循环里直接修改了静态变量station(station++),操作的是原变量本身,所以每次循环都会更新它的值。
修复方案
有两种简单的修复方式:
方式1:接收方法返回值,更新原变量
修改main方法里的调用代码,把方法返回的新值赋值给passenger:
public static void main(String[] args) { station = 0; passenger = 0; for(station = 0; station <=5; station++) { System.out.println("Station Passenger"); // 接收返回值并赋值给passenger passenger = passengerChange(station,passenger); System.out.println(station + " " + passenger); } }
方式2:直接操作静态变量,无需传递参数
因为passenger是静态变量,passengerChange方法可以直接访问它,不用作为参数传入:
public static void passengerChange(int s) { if(s==1 || s==5) { passenger++; } if(s==2 || s==3) { passenger = passenger +2 -1; } if(s==4) { passenger--; } }
调用时直接传station即可:
passengerChange(station);
原代码与输出
你的原代码:
public class BusGame { static int station, passenger; public static void main(String[] args) { station = 0; passenger = 0; for(station = 0; station <=5; station++) { System.out.println("Station Passenger"); passengerChange(station,passenger); System.out.println(station + " " + passenger); } } public static int passengerChange(int s,int p) { if(s==1 || s==5) { p++; } if(s==2 || s==3) { p=p+2-1; } if(s==4) { p--; } return p; } }
输出结果:
Station Passenger 0 0 Station Passenger 1 0 Station Passenger 2 0 Station Passenger 3 0 Station Passenger 4 0 Station Passenger 5 0
内容的提问来源于stack exchange,提问作者Anaria
相关产品推荐
相关产品推荐

