47.了解和使用類庫
書中通過一個(gè)產(chǎn)生隨機(jī)數(shù)的例子來告訴我們使用類庫的幾個(gè)好處:
- 通過使用標(biāo)準(zhǔn)類庫拍皮,可以充分利用這些編寫標(biāo)準(zhǔn)類庫的專家的知識源织,以及在你之前的其他人的使用經(jīng)驗(yàn)琢融。
- 不必浪費(fèi)時(shí)間為那些與工作不太相關(guān)的問題提供特別的解決方案甚带。
- 標(biāo)準(zhǔn)類庫的性能往往隨著時(shí)間的推移而不斷提高啸如,無需你做任何努力迹蛤。
- 可以使自己的代碼融入主流膜钓。
在每個(gè)重要的發(fā)行版本中枝秤,都會有許多新的特性被加入到類庫中醋拧,所以與這些新特性保持同步是值得的。
48.如果需要精確的答案淀弹,請避免使用float和double
對于任何需要精確答案的計(jì)算任務(wù)丹壕,不用使用float或者double,可以使用BigDecimal薇溃、int或者long菌赖。
BigDecimal有兩個(gè)缺點(diǎn):與基本運(yùn)算類型相比,很不方便沐序,而且很慢琉用。如果可以接受這兩個(gè)缺點(diǎn)的話,就可以使用BigDecimal策幼。
如果性能非常關(guān)鍵邑时,并且你又不介意自己記錄十進(jìn)制小數(shù)點(diǎn),而且涉及的數(shù)值又不太大特姐,就可以使用int或者long晶丘。如果數(shù)值范圍沒有超過9位十進(jìn)制數(shù)字,就可以使用int唐含。如果不超過18位十進(jìn)制數(shù)字浅浮,就可以使用long。如果數(shù)值可能超過18位數(shù)字捷枯,就必須使用BigDecimal滚秩。
49.基本類型優(yōu)先于裝箱基本類型
Java一個(gè)類型系統(tǒng)由兩部分組成,包含基本類型和引用類型淮捆。每個(gè)基本類型都有一個(gè)對應(yīng)的引用類型郁油,稱作裝箱基本類型本股。
基本類型和裝箱基本類型之間的三個(gè)區(qū)別是:
- 基本類型只有值,而裝箱基本類型則具有與它們的值不同的同一性已艰,因?yàn)樗且妙愋腿邢嗤闹担瑓s代表不同的對象哩掺。
- 基本類型只有功能完備的值凿叠,而裝箱基本類型除了功能完備的值外,還有null嚼吞。
- 基本類型通常比裝箱基本類型更節(jié)省時(shí)間和空間盒件。
幾種要使用裝箱基本類型的情況: - 作為集合中的元素、鍵和值舱禽。
- 在參數(shù)化類型中炒刁,必須使用裝箱基本類型作為類型參數(shù)。
- 在進(jìn)行反射的方法調(diào)用時(shí)誊稚,必須使用裝箱基本類型翔始。
總之,可以選擇的時(shí)候里伯,基本類型要優(yōu)于裝箱基本類型城瞎。當(dāng)程序裝箱了基本類型值時(shí),會導(dǎo)致高開銷和不必要的對象創(chuàng)建疾瓮。
52.通過接口引用對象
如果有合適的接口類型存在脖镀,那么對于參數(shù)、返回值狼电、變量和域來說蜒灰,就都應(yīng)該使用接口類型進(jìn)行聲明。
如果沒有合適的接口存在肩碟,完全可以用類而不是接口來引用對象:
- 值類强窖,更一般地講,如果具體類沒有相關(guān)聯(lián)的接口削祈,只有通過它的類來引用它的對象翅溺。
- 對象屬于一個(gè)框架,而框架的基本類型是類岩瘦,不是接口。
- 類實(shí)現(xiàn)了接口窿撬,但是它提供了接口中不存在的額外方法启昧。
如果給定的對象具有適當(dāng)?shù)慕涌冢瑒t用接口引用對象劈伴,如果不是密末,則使用類層次結(jié)構(gòu)中提供了必要功能的最基礎(chǔ)的類握爷。