分享

C#-值类型与引用类型

 新用户26922hFh 2022-01-08

  我们学习的数据类型分为值类型与引用类型,接下来看在使用时其具体会有什么区别

  值类型:int、double、float、long、short、char、byte、bool、enum、struct、decimal等

  引用类型:字符串、数组、类、接口等

  上面列举的值类型大都学过,引用类型的都学过不再赘述

  值类型与引用类型的区别:

  1)值类型派生自System.ValueType;引用类型派生自System.Object

  2)值类型作为局部变量存储在栈上;引用类型:引用对象的地址存储在栈,数据存储在堆里

  所以值类型变量赋值时是拷贝一个副本;引用类型变量的赋值是复制对象地址的引用。

  说得太抽象看实例

  C#-值类型与引用类型 101

  值类型与引用类型

  例子值类型的赋值过程

  a=6; b=a;此时a与b的值都是6 然后b重新赋值 b=10;此时 a=6; b=10;如上图运行结果

  由此可知:值类型变量赋值时是拷贝一个副本

  例子引用类型的赋值过程

  C#-值类型与引用类型 101

  p1对象

  对对象p1的Name赋值时,在堆中开辟一块用于存储对象数据的内存空间,在栈中存储的是该对象引用在堆中的地址,栈地址(十六进制)指向p1

  C#-值类型与引用类型 101

  p2对象

  p2=p1的意思是栈中p2存储的引用地址复制给p1在堆中的地址,此时p2与p1都指向堆中同一对象,所以当对p2的Name属性重新赋值为李四时p1与p2的Name一样,如果再重新赋值结果如下

  C#-值类型与引用类型 101

  引用类型重新赋值

  通过上图再次证明对象p1与p2指向同一堆中的对象

  由此可知:引用类型变量的赋值是复制对象地址的引用。

  如果引用类型赋值为null,表示没有指向堆中任何对象,如果此时再使用该对象就会报错

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多