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

Java代码中int变量a值异常:为何5814显示为814?

问题原因:变量a被复合赋值运算符意外修改

你的代码里,变量a初始值确实是5814,但在初始化成员变量p时,你用了复合赋值运算符%=,这个运算符会直接修改左侧变量的值,具体过程如下:

  1. 类的成员变量按声明顺序依次初始化:

    • 第一步: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了。
  2. 当构造函数执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:42:21