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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 13:54:06