C#-老生常谈的 值类型与引用类型
2024-08-26 12:15:09
特殊的String
说起值类型和引用类型,大家都知道这么个事,很多时候我们会拿String做值类型来做比较,但实际上String虽然是值类型,却表现的有点特别
String示例
看下面的一个例子:
话说string是引用类型,所以str1和str2都指向同一块内存地址,当修改了str1的值,按理str2取值时也会受到影响!
但实际上我们会发现,修改str1值之后,str2的值并没有受到影响
这是因为.Net Framework对string做了特殊处理,当string的内容改变,.NET会重新给它分配一块内存空间存放新的字符串内容,而不是在老的地址上进行改变
所以 str1=“ccc”时(改变str1的值),.Net申请了一块新内存存放 “cccc”,然后返回一个地址给str1,所以对str1的改变不影响str2
运行结果
引用类型
对于其它的引用类型,我们可以看到它们改变的都是同一块内存地址
示例代码
请看下面的例子:
运行结果
总结一下
引用类型
引用类型有五种:类(Class) ,对象(Object),字符串(string) ,委托(Delegate),接口(Interface)
值类型
除引用类型之外的 ,整形(int),boo,byte,struct,enum
区别
值类型的把值存放在他们自身所分配到的内存中,引用类型只是包含指向内存地址的引用(指针)
最新文章
- mysql 基础操作一
- Sql Server函数全解<;一>;字符串函数
- Java对象的深拷贝和浅拷贝、集合的交集并集
- C语言 &#183; 最小公倍数
- Linux系统移植(1) ------搭建交叉编译环境
- X-Frame-Options 响应头
- 面试准备(二) 绘制 Activity 的生命流程图
- Mysql常出现的问题
- P2672 推销员
- 查看oracle 数据库的DBID
- CODEVS 3139 栈练习3
- LIS 最长递增子序列问题
- Unity -JsonUtility的使用
- 浅谈JavaScript和DOM中的类数组对象
- Git忽略规则.gitignore梳理
- 将Chrome插件Momentum背景图片设为桌面壁纸
- Redis学习笔记(1)-安装Oracle VM VirtualBox
- Thymeleaf教程入门到深入1:基础介绍
- “javac”不是内部或外部命令的解决办法(JDK1.5 ~ JDK10)
- 不需要更多JS框架了
热门文章
- MVC源码分析 - ModelBinder绑定 / 自定义数据绑定
- 命令行下更好显示 postgresql 的查询结果
- mysql pdo设置显示报错
- Travelling Fee(Dijlstra——最短路问题变型)
- C#图片文字识别
- 无法将类型“System.Collections.Generic.List<;anonymous type:string ClassID,string ClsssName>;”隐式转换为“System.Collections.Generic.List<;Ecology.Model.EnergyFlowGraph>;”
- java多线程框架
- js 时间格式与时间戳的相互转换示例代码
- Spring Boot使用layui的字体图标时无法正常显示 解决办法
- TCP连接与OKHTTP复用连接池