Java调用静态方法传静态int变量后原值未修改问题
问题根因
本质是对Java基本类型的值传递机制理解存在偏差,从语言规则层面,就不可能通过修改方法形参的方式改动外部传入的静态变量值。
逻辑拆解
- Java处理基本数据类型(本例为
int)的方法传参时,会将实参的数值复制一份独立副本,传给方法的形参,全程不会传递原变量本身的内存地址或引用。你调用Klasa.metoda(i)时,方法内部的形参x只是静态变量Main.i(初始值10)的临时拷贝,二者内存位置完全独立,没有任何关联。 - 你在方法内执行
x +=2的操作,修改的只是这个临时拷贝x的数值,全程没有任何代码触达原静态变量Main.i的存储位置。等方法执行完毕,存放临时变量x的栈空间就会被回收,这次修改直接消失,对原变量没有任何影响。
实际运行结果对应
你给出的代码实际执行后输出顺序为:
10 12 10
- 第一行输出10:是静态变量
i的初始值,此时没有任何代码对它做修改。 - 第二行输出12:因为打印语句直接将
Klasa.metoda(i)的返回值作为打印内容——方法收到i的副本10,加2后返回12,这个返回值没有被存储回原静态变量,只是被直接打印了出来。 - 第三行输出10:整个执行流程里,没有任何一条语句对
Main.i重新赋值,它始终保持初始的10。
正确实现方式
如果要让方法返回的计算结果真正修改原静态变量,必须显式将返回值赋值回原变量,对应写法为:i = Klasa.metoda(i);
试图通过方法内部修改形参的方式改动外部基本类型变量,从Java的传参规则上就无法实现。
内容的提问来源于stack exchange,提问作者Mr_t
相关产品推荐
相关产品推荐

