來源:http://www.cnblogs.com/guozp/p/6099902.htmlhtml
一、System.out在JVM和操做系統都具備緩存功能,輸出的東西不必定實時輸出,可能積累幾個字符纔會一塊輸出緩存
二、System.err 不帶緩存(默認,可修改),會實時輸出,打印的東西能夠立馬顯示在屏幕。
三、若是使用了log4j的日誌記錄,System.err會被記入日誌,System.out不會。
四、JDK的解釋是System.out是一般輸出信息的方式,System.err是用在顯示錯誤信息或者system.out被重定向之後,須要當即讓用戶注意到的信息的輸出。測試
注意:單用其中一種都不會出問題,可是若是混用的話(System.err和System.out),就會輸出順序可能不是本身想要的。千萬不要小看這個輸出順序問題,當你測試線程的輸出順序或者其餘依賴順序來判斷執行過程的時候,這個時候就若是輸出亂序的話,可能就會讓你放棄某個方案。spa
若是測試依賴順序時必定要注意!操作系統
附上簡單的用例:線程
public class Test { public static void main(String[] args) { System.out.println("start..."); System.err.println("middle..."); System.out.println("end..."); } }
理想輸出:日誌
start...
middle...
end...code
屢次測試會出現如下輸出:htm
middle...blog
start... end...