我有一定的难度,从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