值类型与引用类型的区别;
下面我用一个例子,画一个图来说明一下值类型与引用类型的区别;
引用类型的值
当我们要使用引用类型的值的时候,我们new一个新的实体,但是该实体根本就没有创建,而是直接与被引用值的地址建立联系,也就是说,该创建的新的实体的与被引用的值其实就是一个东西。当新创建的实体改变时,被引用的值也会改变。被引用的值被改变时,新创建的实体的值也会改变。
如下图,堆中有一个引用类型的值名a,我们现在需要调用a的值,用b=new a,获得了a的值,这时b并未创建一个新的实体,而是将调用地址直接指向了a,这样当我们改变b的值的时候,a的值随之改变。同理a的值改变时b的值也随之改变。
值类型的值
值类型的值在执行b=new a 代码的时候,会在堆里面重新分出控件然后将a的值复制到新的内存空间中,这时候b指向的是新创建出来的空间b。b的值改变的时候,a的值不受影响。
ref修饰符,的作用是将值类型的参数修饰为引用类型。
out修饰符的功能主要是返回方法中的参数。
out修饰符和ref修饰符的功能都是相同的,就是将参数作为引用类型的值进行传递。
这样我们即使没有返回值,也相当于获得了该方法的返回值。
out修饰符与ref修饰符的不同之处在于:
out修饰符修饰的参数在传参的时候可以不用赋值,但是在方法执行完之前一定得赋值。
ref修饰符在传值的时候需要参数有值;