string作为引用类型为什么不能在函数内部修改外部的值————C#语言学习篇

引用类型与值类型

引用类型: 引用类型变量的值为一串地址,变量存储在栈中,变量的数据存储在地址所指向的堆空间中。

值类型: 值类型变量和变量的数据都是存储在栈中。

当值类型的变量作为函数的形参时:

在函数内部对形参的值进行修改,是不会改变外部实参的值,若想改变需用ref关键字来修饰。

当引用类型的变量作为函数的形参时:

函数内部对形参的值进行修改,可以改变外部实参的值,因为引用类型在传参时,是将变量的地址给了形参,当形参被修改时,意味着其地址所指向的堆空间中的值被修改了,此时外部实参也指向的该地址所指向的堆空间,因此间接的对外部实参的值进行改变。

当string类型的变量作为函数的形参时:

而string类型比较特殊,string类型是引用类型,但是在函数内部是无法修改外部实参的值的,因为string类型的变量在被赋予新值的时候,不会将原值擦去而填上新的值,而是会在堆中重新开辟空间,在空间中放入新的值,从而变量的地址也会改变,变成新空间的地址

综上所述,当string类型在传参时,形参会和实参的值一样,都是存的同样的地址,而地址都是在堆中指向同一空间,当在函数内部对形参的值进行修改时,此时形参的值变了,形参所存的的地址也变了,而外部实参的地址还是原来的地址,因此在堆中还是指向原来的空间,并未修改它的值因此string类型无法在函数内部修改外部的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值