我想問在Java中是否應該避免自動裝箱。由於有些方法需要一個基本類型'double'並且傳遞一個'Double'對象作爲參數,所以應該避免這種情況,因爲編譯器會將您傳遞的對象解開並且可能很重。應該在Java中避免自動裝箱
9
A
回答
7
這就是Java的說明說上autoboxing:
身高基本類型
使用原始類型那裏不需要兩個 原因對象。
- 原始類型可能比相應的包裝器類型快很多,並且永遠不會變慢。
- 包裝 類型的不變性(創建後無法更改)可能會使其無法使用。
- 可能會有一些意外的行爲涉及==(比較 引用)和.equals()(比較值)。示例請參閱下面的參考文獻 。
4
經驗法則是:如果可能,總是使用原語。
有些情況下,這是不可能的,如集合,所以只有使用包裝。
1
如果談論性能,您不必避免自動裝箱,JVM應該處理該問題。你唯一應該考慮的是你的代碼的可讀性。
4
這是一個設計選擇,並不平凡地回答每一個案件。
有幾個項目是可能影響你的決定:
優點:
自動裝箱和自動拆箱可以使你的代碼容易閱讀:
省去所有不必要的
.doubleValue()
和Double.valueOf()
減少了視覺噪音,並可以使您的代碼更易於閱讀。自動裝箱讓您輕鬆使用原始值的集合(如
List<Double>
,...)
缺點:
過多的,不必要的自動裝箱和自動拆箱可以阻礙你的表現。
例如,如果您有回報一個
double
和預計一個double
另一個API,但你辦理值作爲之間的雙,那麼你在做無用的自動裝箱的API 。自動拆箱可以引入一個
NullPointerException
,你不要指望它:使用自動裝箱值集合public void frobnicate(Double d) { double result = d/2; // ... }
使用很多更多的內存比類似
double[]
例如。
0
應該避免自動裝箱。它可能會因過載而導致錯誤,並對性能有一定的影響。 儘管如此,它可能不是您的應用程序中的問題。但請注意影響。
這裏我的帖子到:拆箱時 https://effective-java.com/2010/05/the-advantages-and-traps-of-autoboxing/
相關問題
- 1. Java自動裝箱
- 2. 番石榴,Objects/MoreObjects重載以避免自動裝箱。
- 3. 如何在擴展System.Object時避免裝箱/取消裝箱?
- 4. Java的自動裝箱/拆箱wierdness
- 5. jQuery的避免重複集裝箱
- 6. Java中的自動裝箱問題
- 7. Java手動裝箱VS自動裝箱的原始數字
- 8. 應該在重頁中避免ASP.NET AJAX?
- 9. 我應該避免在IIS中安裝WordPress嗎?
- 10. 避免在Java中
- 11. Mapbox - 避免自動中心
- 12. 避免自動回
- 13. 哪些symfony自動生成的文件應該避免編輯?
- 14. 自動裝箱NSArray?
- 15. 包裝和自動裝箱
- 16. 如何避免包裝在CSS浮動
- 17. 在IntelliJ IDEA中禁用Java的自動裝箱
- 18. 使用對象在java中自動裝箱拆箱使用對象
- 19. 在textarea的避免包裝
- 20. 我應該在生產應用程序中避免打包嗎?
- 21. 避免在QGraphicsView上自動轉換QGraphicsScene
- 22. 應該避免雙向關係?
- 23. C++程序員應該避免memset嗎?
- 24. 「雙重」任務 - 應該避免嗎?
- 25. 應該避免全局變量?
- 26. DSP性能,應該避免什麼?
- 27. 我應該避免使用STATIC vaiables
- 28. UITextView應該避免刪除html標記
- 29. 我們應該避免使用LEFT JOIN
- 30. 避免在行動
具體的異常行爲包括NullPointerException異常。 –
autoboxing驚喜:http://www.theserverside.com/news/thread.tss?thread_id=27129 – 2011-09-30 13:07:56
是的,但問題是關於'autoboxing'。如果他會問'我應該在封裝類中使用原語',那麼當然你是對的,否則自動裝箱本身不會影響現代JVM的性能 - 至少從我所知道的。 – Kris