开发者社区> 史迪奇abc> 正文

C#-老生常谈的 值类型与引用类型

简介:
+关注继续查看



特殊的String

说起值类型和引用类型,大家都知道这么个事,很多时候我们会拿String做值类型来做比较,但实际上String虽然是值类型,却表现的有点特别

String示例

看下面的一个例子:

image

话说string是引用类型,所以str1和str2都指向同一块内存地址,当修改了str1的值,按理str2取值时也会受到影响!

但实际上我们会发现,修改str1值之后,str2的值并没有受到影响

这是因为.Net Framework对string做了特殊处理,当string的内容改变,.NET会重新给它分配一块内存空间存放新的字符串内容,而不是在老的地址上进行改变

所以 str1=“ccc”时(改变str1的值),.Net申请了一块新内存存放 “cccc”,然后返回一个地址给str1,所以对str1的改变不影响str2

运行结果

image

引用类型

对于其它的引用类型,我们可以看到它们改变的都是同一块内存地址

示例代码

请看下面的例子:

image

运行结果

image

总结一下

引用类型

引用类型有五种:类(Class) ,对象(Object),字符串(string) ,委托(Delegate),接口(Interface)

值类型

除引用类型之外的 ,整形(int),boo,byte,struct,enum

区别

值类型的把值存放在他们自身所分配到的内存中,引用类型只是包含指向内存地址的引用(指针)\

本文转自赵青青博客园博客,原文链接:http://www.cnblogs.com/zhaoqingqing/p/3916261.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
值类型和引用类型|学习笔记
快速学习值类型和引用类型。
35 0
再聊一次值类型和引用类型
这是一个托管的值类型,表示array的一个片断, 在用做websocket接收数据的载体时我发现每次值传递后, 这个ArraySegment<byte>貌似发生了变化。这勾起了我的探究欲。
88 0
C#基础——值类型和引用类型
C#基础——值类型和引用类型
466 0
C#8.0可空引用类型的使用注意要点
C#8.0可空引用类型的使用注意要点最近VS2019正式版发布了,装下来顺便试用了一下C#8.0,最大的看点应该就是可空引用类型了。不过C#8.0仍然处于Beta的状态,而且试用时也遇到了几个坑。 背景知识说明: 所谓的可空引用类型是指,一旦启用了可空引用类型这个新特征,引用类型将默认被视为不可空,无法赋予null,除非手工将它设为可空引用类型。
816 0
第183天:引用类型和值类型
一、内存分配 1、数值型内存分配 1 2 var num1; //这个时候不进行内存分配 3 var num3=9;//分配内存 4 var num4=num3;//会不会分配 5 6 // 这里到底分配还是不分配内存?? 7 // 答案 --分配内存 彼此拥有独立的内存空间,互不影响 8 console.
955 0
c#值类型与引用类型区别
值类型对象的两种表示方式:未装箱和已装箱,引用类型总是处于已装箱 值类型从System.ValueType派生。该类型提供了与System.Object相同方法,但System.ValueType重写了Equals方法, 能在两个对象的自断值完全匹配的前提下返回true。
885 0
【基础中的基础】引用类型和值类型,以及引用传递和值传递
一直在博客园怼人,非常惭愧。所以郑重决定: 好好写一篇干货,然后再接着怼人。 这是一起帮上陈百万同学的求助,讲了一会之后,我觉得很有些普世价值,干脆就发到园子来。面向小白,高手轻拍。   我们从最简单的说起(基础知识,懂的同学直接往下拉),直接上代码: static int amo...
1442 0
+关注
史迪奇abc
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载