我有一定的難度,從Programming Language Pragmatics, by Scott在這個例子中,是否需要拆箱時使用裝箱?
C#和最近的Java版本的理解下面的部分進行自動裝箱和 拆箱操作是避免 包裝語法在很多情況下:
ht.put(13, 31); int m = (Integer) ht.get(13);
這裏Java編譯器創建隱藏的Integer對象來保存值爲13和31的 ,以便它們可以作爲引用傳遞。 仍然需要在返回值上進行整型轉換,以確保 13的哈希表條目確實是一個整數,而不是浮點數字或字符串,例如 。泛型,我們將在 第7.3.1節中考慮,允許程序員聲明僅包含 整數的表。在Java中,這將消除需要投入返回值 的值。在C#中,它將消除對裝箱的需求。
我想知道這是什麼意思的「整型投在返回 值仍然需要,以確保13 哈希表項實際上是一個整數,而不是,比方說,一個浮點數或 字符串「?請注意,這是用Java編寫的。
在
int m = (Integer) ht.get(13);
,在拆箱過程中是否使用拳擊(由(Integer)
)(轉讓給int
)?具體來說,
(integer)
是否將其操作數轉換爲Integer
類的對象?但是其操作數ht.get(13)
已經是對象,現在分配需要內置 類型的值int
。所以我們不需要從Integer
到int
這裏的轉換嗎?Java在 Java中泛型如何「消除需要返回值的值」?
在C#中,它將如何「消除對拳擊的需求」?
謝謝。
在該示例中,'Hashtable#get'具有返回類型'Object'。這一評論與拳擊無關。 –
謝謝。爲什麼'(Integer)'應用於其返回,如果它的返回已經是'Integer'? – Tim
在泛型世界中,(Integer)類型相當混亂,但這裏的想法是將原始返回類型(Object)轉換爲(Integer),然後將其拆箱爲(int)。 – eckes