Java代码中int变量a值异常:为何5814显示为814?
问题原因:变量a被复合赋值运算符意外修改
你的代码里,变量a初始值确实是5814,但在初始化成员变量p时,你用了复合赋值运算符%=,这个运算符会直接修改左侧变量的值,具体过程如下:
类的成员变量按声明顺序依次初始化:
- 第一步:
int a = 5814,此时a的值为5814。 - 第二步:
int m = (a/1000),计算5814/1000得到5并赋值给m,这一步不改变a的值。 - 第三步:
int p = (a %= 1000),a %= 1000等价于a = a % 1000,5814对1000取余结果是814,所以a被直接改成814,同时将该结果赋值给p。 - 后续初始化
q和r时,修改的是p和q的值,不会影响a,但此时a已经是814了。
- 第一步:
当构造函数执行
System.out.println(a)时,a的值早已被第三步的操作修改,所以输出814而非初始的5814。
修复方案
如果想保留a的初始值,把复合赋值运算符改成普通取余运算即可(去掉等号),修改后的代码如下:
public class Hello { int a = 5814; int m = (a/1000); int p = (a % 1000); // 去掉等号,仅做取余运算,不修改a int q = (p % 100); int r = (q % 10); public Hello() { System.out.println(a); System.out.println(m); System.out.println(p); System.out.println(q); System.out.println(r); } public static void main(String[] args) { new Hello(); } }
修改后运行,a的输出会是5814,其他变量值也符合预期。
内容的提问来源于stack exchange,提问作者007
相关产品推荐
相关产品推荐

