我们学习的数据类型分为值类型与引用类型,接下来看在使用时其具体会有什么区别 值类型:int、double、float、long、short、char、byte、bool、enum、struct、decimal等 引用类型:字符串、数组、类、接口等 上面列举的值类型大都学过,引用类型的都学过不再赘述 值类型与引用类型的区别: 1)值类型派生自System.ValueType;引用类型派生自System.Object 2)值类型作为局部变量存储在栈上;引用类型:引用对象的地址存储在栈,数据存储在堆里 所以值类型变量赋值时是拷贝一个副本;引用类型变量的赋值是复制对象地址的引用。 说得太抽象看实例
值类型与引用类型 例子值类型的赋值过程 a=6; b=a;此时a与b的值都是6 然后b重新赋值 b=10;此时 a=6; b=10;如上图运行结果 由此可知:值类型变量赋值时是拷贝一个副本 例子引用类型的赋值过程
p1对象 对对象p1的Name赋值时,在堆中开辟一块用于存储对象数据的内存空间,在栈中存储的是该对象引用在堆中的地址,栈地址(十六进制)指向p1
p2对象 p2=p1的意思是栈中p2存储的引用地址复制给p1在堆中的地址,此时p2与p1都指向堆中同一对象,所以当对p2的Name属性重新赋值为李四时p1与p2的Name一样,如果再重新赋值结果如下
引用类型重新赋值 通过上图再次证明对象p1与p2指向同一堆中的对象 由此可知:引用类型变量的赋值是复制对象地址的引用。 如果引用类型赋值为null,表示没有指向堆中任何对象,如果此时再使用该对象就会报错 |
|
来自: 新用户26922hFh > 《待分类》