05.16 Java編程思想——避免創建不必要的對象

當你應該重用現有對象的時候,請不要創建新的對象

” 更多編程細節請關注我哦,歡迎點贊,歡迎轉發

最為突出的例子莫過於字符串常量的創建,眾所周知String字符串有兩種創建方式:

Java編程思想——避免創建不必要的對象

第一種String字符串的創建是在方法區(JDK7後改到了堆內存)中的常量池中創建一個”hello”常量,將來若再有一個字符串變量為“hello”時將直接指向常量池中的“hello”變量而不用重新創建;

第二種則是會在堆變量中創建一個新的String實例,將來若再以此方式創建一個字符串變量為“hello”時還是會重新創建一個String實例。顯然第二種方式創建了一個“不必要”的實例,相比較而言第一種方式更加高效。

另外一個例子則是將”true”變量轉換為Boolean類型也有以下兩種轉換方式:

Java編程思想——避免創建不必要的對象

第一種轉換方式也是每次都會在堆內存中創建一個新的Boolean實例;

第二種查看其源代碼便知不會每次返回一個新的實例,返回的是一個在編譯器就已經確定了的static final Boolean型變量:

Java編程思想——避免創建不必要的對象

一個例子是否是在1946年至1964年出生來說明,這個例子在現實當中也很常見:

Java編程思想——避免創建不必要的對象

 這樣的代碼我相信人人都寫過類似的,書中提到這種代碼的寫法每次都創建新的實例對象,而實際上是不必要的,而給出了一種比較高效的代碼示例:

Java編程思想——避免創建不必要的對象

利用靜態代碼塊在類Person初始化的時候創建對象,而在之後調用方法判斷時不再每次重新創建新的實例對象,這種寫法有點“燒腦”,確實有點“不符合”編碼習慣,大概是因為這是需要思考才能寫出來的原因吧。

Java編程思想——避免創建不必要的對象


分享到:


相關文章: