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数据转换