這樣就可以避免創建新的實例,不信看看valueOf()靜態方法: public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
} 這個靜態工廠方法返回的仍然是兩個靜態變量TRUE和FALSE之一,而不是new一個Boolean出來。雖然Boolean非常簡單,占用的內存也很少,但是一個復雜的類用new創建實例的開銷可能非常大,而且,使用工廠方法可以方便的實現緩存實例,這對客戶端是透明的。所以,能用工廠方法就不要用new。
和Boolean只有兩種狀態不同,Integer也是immutable class,但是狀態上億種,不可能用靜態實例緩存所有狀態。不過,SUN的工程師還是作了一點優化,Integer類緩存了-128到127這256個狀態的Integer,如果使用Integer.valueOf(int i),傳入的int范圍正好在此內,就返回靜態實例。
hashCode()方法很奇怪,兩種Boolean的hash code分別是1231和1237。估計寫Boolean.java的人對這兩個數字有特別偏好: public int hashCode() {
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/