我寫東西一向追求短小精悍,就不放代碼去驗證的,只說結論,並會與Java泛型做對比。有不對之處還望指出。
泛型作為一個在C#2.0中就引入的特性,也是C#的重要特性之一,我經常看到有人討論泛型帶來的便捷性和(一定程度上的)安全性,卻很少見有人說泛型的性能優勢,要麼點到即止要麼泛泛而談說得太復雜——可能僅僅是因為我孤陋寡聞吧……
好了,廢話不說了,以下是結論:
如果你要用一個ArrayList add一個byte,我們看看會發生什麼。
假設在一個32位CLR上,對對象進行裝箱要消耗8字節,用4字節存儲數據(因為要向上取整),還有4字節是引用——這就用了16字節了。而如果使用List<byte>,因為類型參數已經確定,每一個byte只會產生1字節用來儲存。
再來看JAVA的泛型……JAVA大家都知道了……因為類型擦除,泛型沒有什麼性能優勢,還是相當於一個普通的ArrayList,要對所有類型進行類似C#中的“裝箱”,唯一的好處就是安全性了。
一路寫下來好像沒什麼好說的……為什麼要說這個呢,請看類標題。我有一個不成熟的樂趣就是吹.NET黑JAVA,突然想起一點就記下來了……