unity(2)笔记07-C#基础:数据类型,值类型,引用类型,值传递,引用传递,ref,out,拆装箱,string特性,StringBuilder,枚举

av28779788?p=79视频学习笔记

  • 当前为-->第二部分:C#基础

数据类型

数据类型

类型分类

类型归属

内存分配

内存

分配

栈区存放方法(调用时出生,调用结束时销毁);方法中的值类型变量(局部变量);引用类型变量和它的引用,实际数据存放在堆区.
局部变量(值类型/引用类型)存储位置:

值类型:变量本身在栈中,值(数据)在栈中
引用类型:变量本身在栈中,变量的值存储实际数据的内存地址(引用),内存地址(引用)的值即实际数据存在堆中.

二者之间最大的区别

值类型变量有两个元素:变量本身,变量的值:数据;
引用类型变量有三个元素:变量本身,变量的值:内存地址(引用);内存地址的值:数据

下图显示了方法内部中,局部变量存储在何处(栈区还是堆区):

以下示例区分值类型和引用类型的特点:






以下示例了值传递,按引用传递,值类型使用ref按引用传递,值类型使用out按引用传递参数:

tryParse方法(使用out参数的例子)

我们可以用tryParse方法试着将1个字符串转换为数值.
如果成功返回true,且把转换成功的数值传递到out参数中;
如果失败则返回false,此时out参数里值为0

 




 


string赋值字符串常量,系统会存到字符串池中:

object对象:

注意:以下是浪费资源的代码示例,循环多少次,就会产生多少次字符串常量(后果是垃圾收藏器GC会最终销毁垃圾,造成卡顿):

我们使用以下方法来避免这种浪费:


如果给指定容量为10且已经满容量的StringBuilder再加1个字符串呢?来看:


运行并没有出错!"俺老孙来也"成功加入builder中去了!这是为什么呢?编译器如下图工作:

原来是系统开辟了更大的空间以容纳之.
当然,原有的字符串空间会变成垃圾.默默的等待GC垃圾收藏器处理...GC工作时就会卡顿...

 





们可以通过按位与按位或运算来判断复选枚举值的情况,如下:

enum数据转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值