" Boxing"是什么意思?在C#中(而不是Java)?

时间:2014-11-17 13:03:46

标签: java c#

我从Java背景学习C#并对ValueType有些疑惑。我从阅读MSDN的C# vs Java概述中得到的理解是,原语是对象而不是包装器。如果是这样,为什么他们需要boxed来调用方法?看起来他们的意思不同于Java的自动装箱,但我不确定是什么。它看起来更像是铸造。

1 个答案:

答案 0 :(得分:10)

拳击是Java和C#中非常相似的概念。不同之处在于它何时发生:

Character ch = 'a';

这将导致Java中的拳击,因为' a'是原始的,字符是类(包装器)。 在C#中:

Char ch = 'a';

不会导致装箱,因为Char不是原始类型,而是值类型类。要在C#中进行装箱,您需要将值类型的对象强制转换为object引用。

object o = 'a';

编辑:正如HighCore在评论中所提到的,C#中的拳击机制有重要意义。将内容放入List<int>并不会导致装箱并取出内容并不会导致取消装箱,因为整数列表是未装箱的整数的真实列表。