java基础(System.err和System.out)

时间:2021-12-21 11:59:03

最近被学弟W问到一道面试题,有一副扑克,红桃,方块,黑桃,梅花,每种花色各一张,输出相加等于24的所有可能。

题目本身很简单,但是学弟W想把红桃和方块用红色的输出,然后他就想到了System.err,这样红色的用System.err输出,黑色的就用System.out输出。结果就出现了问题,顺序完全乱了,如果只用一种颜色顺序就完全没有问题。我看到后也很纳闷儿,然后查资料后发现:

1.System.out在JVM和操作系统都具有缓存功能,就是你输出的东西不一定实时输出,有时候会积攒到一定数量才会输出,System.err会实时输出,单独使用的话可能感觉不到,如果两种方式混合使用就会发现了。

2.如果使用了log4j的日志记录,System.err会被记入日志,System.out不会。

3.JDK的解释是System.out是通常输出信息的方式,System.err是用在显示错误信息或者system.out被重定向以后,需要立即让用户注意到的信息的输出