在 RegExpMatcher 的例子中, 你看見了 當一個方法返回一個 String 類型時, 它通常需要新建一個 String 對象. BadRegExpMatcher 的一個問題就是 match() 返回一個對象而不是一個原類型 -- 但是只因為一個方法返回一個對象, 不意味著必須有一個新對象創建. 考慮一下 java.awt 中的幾何類, 象 Point 和 Rectangle. 一個 Rectangle只是四個整數(x, y, 寬度, 長度)的容器, AWT Component 類存儲組件的位置, 通過getBounds()作為一個Rectangle 返回,getBounds() 只是一個存儲元 -- 它只使一些 Component 內部的一些狀態信息可用. getBounds() 需要創建它返回的 Rectangle 嗎? getBounds(), 沒有新對象創建 -- 因為組件已經知道它在哪里 -- 所以 getBounds() 效率很高. 但是 Rectangle 的可變性又有了其他問題. 當一個調用者運行一下程序會發生什么呢?Rectangle 是可變的, 它在 Component 不知道的情況下使 Component 移動. 對象AWT 這樣的 GUI 工具箱來說, 這是個災難, 因為當一個組件移動以后, 屏幕需要重繪, 組件監聽器需要被通知, 等等. 所以上面的實現 Component.getBounds() 的代碼看起來很危險. 但是現在, 每一個 getBounds() 的調用都創建一個新對象, 就象 RegExpMatcher 一樣.在 String 的情況中, 對象創建是必要的, 因為 String 是不可變的. 對象的創建也是必要的, 因為 Rectangle 是可變的. 我們使用 String 避免了這個問題,在我們的接口中沒有使用對象. 雖然在 RegExpMatcher 的情況下很好, 這個方法不總是可行的或者是希望的. 幸運的是, 你可以在實際類的時候可以使用一些技巧, 來免除太多小對象的問題, 而不是完全避免小對象.
【招生辦】
成都鐵路衛生學校
聯系人:楊老師
咨詢電話:028-81459650
移動電話:13096365338
咨詢QQ:2763031284
郵箱:2763031284@qq.com
地址:四川省成都市郫縣團結
網址:
成都鐵路衛生學校 http://www.tineng.net/
高考200分能上什么大學 http://www.57fenshu.com/
成都紡織高等專科學校 http://www.bangboer.com/ucdtc/ |
 |
|