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

为何Java代码输出为"7 9 35 5 27"而非"7 35 5 9 27"?

Java方法调用顺序导致输出差异的原因分析

代码示例

public static void main(String[] args) {
        int x = 5;
        int y = 7;
        System.out.print(m(x, y) + " " + x + " " + m(y, x));
    }

    public static int m(int x, int y) {
        x += 2;
        System.out.print(x + " ");
        y -= 2;
        return (x * y);
    }

问题描述

我手动推演执行步骤:首次调用m(x,y)时,x加2变为7并打印,y减2变为5,返回75=35,此时预期输出"7 35";接着打印x的值5;第二次调用m(y,x)时,x加2变为9,y减2变为3,返回93=27,最终预期输出"7 35 5 9 27",但实际输出为"7 9 35 5 27",请问原因是什么?

原因分析

问题核心在于Java的表达式求值顺序规则:Java会从左到右依次计算System.out.print()括号内的所有操作数,完成所有方法调用和变量取值后,才会把所有结果拼接成字符串输出,而非边计算边输出。

具体执行流程拆解:

  1. 先执行m(x,y):方法内实时打印7,返回计算结果35;
  2. 依次获取后续操作数:字符串" "、变量x的值5、字符串" ";
  3. 最后执行m(y,x):方法内实时打印9,返回计算结果27;
  4. 所有操作数计算完成后,将35、" "、5、" "、27拼接成字符串"35 5 27",通过System.out.print()输出。

你之前的错误在于认为调用完m(x,y)后会立刻输出它的返回值,再处理后续内容,但实际上方法内部的System.out.print()是实时输出的,而表达式拼接的结果是最后统一输出的。所以实际输出顺序是:

  • 调用第一个m方法时打印的7;
  • 调用第二个m方法时打印的9;
  • 最后输出拼接好的35 5 27;

最终组合起来就是7 9 35 5 27。

内容的提问来源于stack exchange,提问作者Sami C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:51:10