星期六, 4月 24, 2010

Java Primitive 和 Wrapper Class 陷阱

以下這段程式碼,會印出什麼東西呢?

乍看之下應該要印出 false,但結果竟然是 true。到底是哪裡有錯誤呢?
問題就出在 b > a 的比較時,這兩個 Long 的物件會先做 unboxing 成 primitive type 再比較,實際上執行時也是如此。但是在做 b != c 的比較時,這兩個變數會被當成物件來處理,而不做 unboxing,結果就是 false,因為本身就是不同的 reference。