在这个例子中,需要拆箱时是否使用装箱?
In this example, is boxing used when unboxing is needed?
我在理解 Programming Language Pragmatics, by Scott
的以下部分时遇到一些困难
C# and more recent versions of Java perform automatic boxing and
unboxing operations that avoid
the wrapper syntax in many cases:
ht.put(13, 31);
int m = (Integer) ht.get(13);
Here the Java compiler creates hidden Integer objects to hold the
values 13 and 31, so they may be passed to put as references. The
Integer cast on the return value is still needed, to make sure that
the hash table entry for 13 is really an integer and not, say, a
floating-point number or string. Generics, which we will consider in
Section 7.3.1, allow the programmer to declare a table containing only
integers. In Java, this would eliminate the need to cast the return
value. In C#, it would eliminate the need for boxing.
我想知道“return 上的整数是什么意思
仍然需要值,以确保 13 的散列 table 条目
实际上是一个整数而不是浮点数或
string"?注意这是在Java.
在int m = (Integer) ht.get(13);
中,是否使用装箱(通过
(Integer)
) 在拆箱期间(分配给 int
)?
具体来说,(integer)
是否将其操作数转换为对象
Integer
class?但是它的操作数 ht.get(13)
已经是一个
Integer
对象,现在赋值需要一个内置值
输入 int
。那么我们不需要从 Integer
到 int
的转换吗?
这里?
泛型如何 "eliminate the need to cast the return value"
Java ?
在C#中,如何"eliminate the need for boxing"?
谢谢。
没有在 ht
的声明中指定泛型类型,get()
的 return 类型是 Object
,所以你必须转换它至 Integer
。 Java 然后会自动拆箱到 int
。
演员表本身不做任何转换。它只是告诉编译器将 Object
视为 Integer
。如果对象实际上不是 Integer
,则会在运行时出现 ClassCastException
。
使用泛型类型时,ht
可能会声明为 Map<Integer, Integer>
,因此 get()
会 return Integer
,演员表是多余的。
在 C# 中,它可以声明为 Map<int, int>
的 Java 等价物。 Java 不支持 primitive 类型作为通用类型参数,因此该语法是非法的。
我在理解 Programming Language Pragmatics, by Scott
的以下部分时遇到一些困难C# and more recent versions of Java perform automatic boxing and unboxing operations that avoid the wrapper syntax in many cases:
ht.put(13, 31); int m = (Integer) ht.get(13);
Here the Java compiler creates hidden Integer objects to hold the values 13 and 31, so they may be passed to put as references. The Integer cast on the return value is still needed, to make sure that the hash table entry for 13 is really an integer and not, say, a floating-point number or string. Generics, which we will consider in Section 7.3.1, allow the programmer to declare a table containing only integers. In Java, this would eliminate the need to cast the return value. In C#, it would eliminate the need for boxing.
我想知道“return 上的整数是什么意思 仍然需要值,以确保 13 的散列 table 条目 实际上是一个整数而不是浮点数或 string"?注意这是在Java.
在
int m = (Integer) ht.get(13);
中,是否使用装箱(通过(Integer)
) 在拆箱期间(分配给int
)?具体来说,
(integer)
是否将其操作数转换为对象Integer
class?但是它的操作数ht.get(13)
已经是一个Integer
对象,现在赋值需要一个内置值 输入int
。那么我们不需要从Integer
到int
的转换吗? 这里?泛型如何 "eliminate the need to cast the return value" Java ?
在C#中,如何"eliminate the need for boxing"?
谢谢。
没有在
ht
的声明中指定泛型类型,get()
的 return 类型是Object
,所以你必须转换它至Integer
。 Java 然后会自动拆箱到int
。演员表本身不做任何转换。它只是告诉编译器将
Object
视为Integer
。如果对象实际上不是Integer
,则会在运行时出现ClassCastException
。使用泛型类型时,
ht
可能会声明为Map<Integer, Integer>
,因此get()
会 returnInteger
,演员表是多余的。在 C# 中,它可以声明为
Map<int, int>
的 Java 等价物。 Java 不支持 primitive 类型作为通用类型参数,因此该语法是非法的。