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

NetBeans中运行同一段Java代码两次输出顺序相反的原因咨询

问题分析与解决方案

这事儿的核心原因在于你同时用了System.err和System.out这两个不同的输出流,它们的缓冲机制不一样,导致输出顺序不稳定。

具体细节:

  • System.err(标准错误流)默认是无缓冲或行缓冲模式,它会尽可能快地把内容输出到控制台;
  • System.out(标准输出流)默认是块缓冲模式,它会攒够一定量的内容才会一次性输出,或者等到程序结束、手动触发刷新时才会输出内容。

从你的输出结果反推,代码里应该是先调用了System.err.println(obj),之后又用System.out输出了!。第一次运行时,System.err的内容先被输出,随后System.out的缓冲区被触发刷新,输出!;第二次运行时,可能因为程序结束时的缓冲刷新时机差异,System.out的内容先被输出,System.err的内容随后跟上,最终导致顺序反转。

稳定输出的解决办法:

你可以通过以下几种方式让输出顺序固定:

  • 统一使用同一个输出流:要么全用System.out,要么全用System.err;
  • 若必须同时使用两个流,在每次输出后手动刷新缓冲区,比如调用System.out.flush()和System.err.flush();
  • 把需要输出的内容合并到同一个字符串中,再用单个流输出。

举个修改后的示例代码:

public class check { 
    public String toString(){ 
        String hello="aaaaaa aaaa"; 
        return hello; 
    } 
    public static void main(String[] args) { 
        check obj=new check(); 
        char[] abc=new char[5]; 
        // 统一使用System.out输出
        System.out.println(obj); 
        String hello="heaa^qwertyui"; 
        hello.getChars(2, 3, abc, 0); 
        System.out.println("!");
    } 
}

这样无论运行多少次,输出顺序都会稳定保持为aaaaaa aaaa在前,!在后。

内容的提问来源于stack exchange,提问作者Rushabh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:27:43