一尘不染

为什么打印“B”比打印“#”慢得多?

javascript

我生成了两个1000x矩阵1000

第一个矩阵:O#
第二个矩阵:OB

使用以下代码,第一个矩阵需要 8.52 秒才能完成:

Random r = new Random();
for (int i = 0; i < 1000; i++) {
    for (int j = 0; j < 1000; j++) {
        if(r.nextInt(4) == 0) {
            System.out.print("O");
        } else {
            System.out.print("#");
        }
    }

   System.out.println("");
 }

使用此代码,第二个矩阵需要 259.152 秒才能完成:

Random r = new Random();
for (int i = 0; i < 1000; i++) {
    for (int j = 0; j < 1000; j++) {
        if(r.nextInt(4) == 0) {
            System.out.print("O");
        } else {
            System.out.print("B"); //only line changed
        }
    }

    System.out.println("");
}

运行时间显着不同的原因是什么?


正如评论中所建议的,打印只System.out.print("#");需要7.8871几秒钟,而System.out.print("B");给出still printing....

正如其他人指出它对他们正常工作一样,我尝试Ideone.com,并且两段代码都以相同的速度执行。

测试条件:

  • 我从Netbeans 7.2运行了这个测试,输出到它的控制台
  • 我用于System.nanoTime()测量

阅读 205

收藏
2022-01-25

共1个答案

一尘不染

纯粹的猜测是您使用的终端尝试进行自动换行而不是字符换行,并将其视为B单词字符但#视为非单词字符。因此,当它到达一条线的末端并寻找一个断线的地方时,它#几乎立即就看到了一个并且很高兴地在那里断线;而使用B,它必须继续搜索更长的时间,并且可能有更多的文本要换行(这在某些终端上可能很昂贵,例如,输出退格,然后输出空格以覆盖被换行的字母)。

但这纯粹是猜测。

2022-01-25