回答
Java基元不是「輕對象」。他們是原始人。他們在兩個非常重要的方面作爲對象失敗:他們不能進入對象,他們沒有方法。
除了作爲實際Java對象的字段之外,它們也不會堆在堆上。你不能做new int
。還要注意的是,當你聲明一個基本類型的局部變量時,變量就會存在。當你聲明一個對象類型的局部變量時,你得到的只是一個對象的引用,但它被設置爲null
,並且聲明類型的對象不是通過簡單地聲明該變量來分配的。
請注意,autoboxing有些模糊的區別,但區別肯定存在。
這裏有點混亂。你在你的問題中鏈接到的問題說,原始內容裏面的一個對象可以在堆中。基元不能獨自堆在一起。
您不能像對象那樣引用int
,它們可以直接訪問而不被「取消引用」。
您正在推斷原語可能進入堆中(作爲其他對象的一部分)以得出它們可能是輕量級對象的事實。一組基元組成了一個對象的狀態。它們本身不是物體。
原始人只是有一個價值。他們沒有像Objects那樣的狀態和行爲。他們沒有表現出繼承,多態性等。他們不像實體一樣行爲,但像他們的屬性。
原語的確有一個狀態:它的當前值。 –
@TedHopp,那裏的學位有所不同。人們很難說,「當環路退出時,我的狀態如何?」或者「申請價值已經腐敗」。它們不可互換,語義不同。 –
我認爲根本不存在任何語義差異。畢竟,對象的狀態只不過是其字段的當前值(狀態)的集合。 (這包括所有被引用對象的狀態,可以辯論是否包含「瞬態」字段,但原理是相同的。)原始字段當然可以處於損壞狀態。如果代碼處於中間,例如交換字節,同時也做其他工作,並被中斷(例如,由異常),則可以合理地說該原語處於損壞狀態。 –
- 1. 這樣的對象可以被認爲是不可變的嗎?
- 2. JavaScript可以被認爲是基於類的語言嗎?
- 3. 在Java中,可以通過「空隙」被認爲是一種基本類型?
- 4. 美元符號可以被認爲是jQuery中的宏嗎?
- 5. 這可以被認爲是一個API?
- 6. 在java中,一個對象被認爲是一個變量?
- 7. 是否Int,String等被認爲是Swift中的「基元」?
- 8. javax.persistence.Query對象是否可以被緩存?
- 9. 可以更改域對象字段導致grails域被認爲是修改/髒?
- 10. Java LSP「派生對象可以替代基礎對象」
- 11. 是沒有對象被認爲是壞風格的Rails窗體?
- 12. 對象是否可以被更早的銷燬,以使其存儲內存可以被後續對象重用?
- 13. 鎖定可變對象 - 爲什麼它被認爲是不好的做法?
- 14. 測試對象是否是Clojure中的Java基元數組
- 15. 爲什麼decimal.Decimal對象不被認爲是合理的?
- 16. PHP可以輕鬆地將JSON對象解析爲PHP對象嗎?
- 17. AsyncResult可以被認爲是可序列化的FutureTask嗎?
- 18. Java對象可以成爲Nashorn中JavaScript對象的原型嗎?
- 19. 爲什麼對象被認爲不可迭代,雖然他們實際上是?
- 20. 這是否被認爲是模型或視圖對象?
- 21. 「被動」對象是否被認爲是一種良好的設計實踐?
- 22. 什麼被認爲是C++中的一個小對象?
- 23. ViewModel對象持有Dispatcher被認爲是不好的做法嗎?
- 24. ConfigurationElementCollection對象是否可以爲其元素包含另一個ConfigurationElementCollection對象?
- 25. 是否可以在java中爲Runnable接口創建對象
- 26. 是否可以將java類對象序列化爲類文件?
- 27. Java將未知的基元數組轉換爲對象數組
- 28. React組件+ jQuery可拖動的認爲每個元素是相同的對象
- 29. Go的界面可以被認爲是一個指針?
- 30. HornetQ:哪些版本可以被認爲是穩定的?
即使在JVM級別,原始對象也不是對象。 –