扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
C# 支持两种变量类型:
值类型 — 这些是内置的基本数据类型,例如 char、int、float 和用 struct 声明的用户定义类型。
引用类型 — 从基本类型构造而来的类和其他复杂数据类型。这种类型的变量并不包含类型的实例,而只是包含对实例的引用。
让我们略微深入地研究一下这个问题。如果我们创建两个值类型变量 i 和 j,比如:
int i = 10; int j = 20;
则 i 和 j 彼此完全独立,并且分配了不同的内存位置:
如果我们改变这些变量中的某一个的值,另一个自然不会受到影响。例如,如果我们有一个这样的表达式:
int k = i;
则变量之间仍然没有联系。也就是说,之后如果我们改变 i 的值,k 还会保留赋值时 i 具有的值。
然而,引用类型的做法却不同。例如,我们可以这样声明两个变量:
myClass a = new myClass(); myClass b = a;
现在,因为类是 C# 中的引用类型,所以 a 称为对 myClass 的引用。上面两行中的第一行在内存中创建了 myClass 的一个实例,并且将 a 设置为引用该实例。因此,当我们将 b 设置为等于 a 时,它就包含了对内存中类的引用的重复。如果我们现在改变 b 中的属性,a 中的属性就将反映这些改变,因为这两者都指向内存中的相同对象,如下图所示:
这种将值类型转换为引用类型的过程称为装箱。而相反的将引用类型转换为值类型的过程就称为拆箱。如下面的代码所示:
int valueVariable = 10; // boxing object obj = refVariable; // unboxing int valueVariable = (int) refVariable;
Java 需要我们手动执行这样的转换。通过构造这样的对象,可以将基本数据类型转换成包装类的对象(装箱)。同样,通过调用这种对象中的适当方法,也可以从包装类的对象中提取基本数据类型的值(拆箱)。有关装箱的更多信息,请参见 装箱转换;有关拆箱的更多信息,请参见 拆箱转换。
查看本文来源如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者