C#(与Java相对)中“Boxing”的含义是什么?

本文关键字:是什么 Boxing Java 相对 | 更新日期: 2023-09-27 18:30:49

我正在从Java背景学习C#,对ValueType有些困惑。 通过阅读MSDN的C#与Java概述,我的理解是原语是对象而不是包装器。 如果是这样的话,为什么需要对它们进行框控才能调用方法? 看起来它们的意思与Java的自动装箱不同,但我不确定是什么。 它看起来更像是选角。

C#(与Java相对)中“Boxing”的含义是什么?

Boxing在Java和C#中是非常相似的概念。区别在于何时发生:

Character ch = 'a';

这将导致 Java 中的装箱,因为"a"是原始的,而 Character 是类(包装器)。在 C# 中,这:

Char ch = 'a';

不会引起装箱,因为Char不是基元类型,而是值类型类。若要在 C# 中引起装箱,需要将值类型的对象强制转换为引用object

object o = 'a';

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