1. 数据类型
1.1 常用的数据类型
1.2 常用的转义字符
转义字符 | 含义 |
---|---|
\’ | ‘ |
\” | “ |
\\ | \ |
\a | 警报 |
\b | 退格符 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | Tab符 |
\v | 垂直Tab符 |
\0 | 空格 |
1.3 值类型与引用类型
项目 | 值类型 | 引用类型 |
---|---|---|
内容 | 结构数据类型,枚举数据类型 | 类,接口,数组,字符串,委托 |
内存分配不同 | 通常分配在栈上,它的变量直接包含变量的实例,使用效率比较高 | 分配在堆上,它的变量通常会包含一个指向实例的指针,变量通过该指针来引用实例 |
默认值 | 0 | Null |
继承类 | System.ValueType | Syetem.Object |
表现形式 | 装箱和拆箱 | 装箱 |
状态 | 装箱和未装箱,运行库提供了所以值类型的已装箱形式 | 装箱 |
回收方法 | 不由垃圾回收机制控制,作用域结束时自行释放,从而减少托管堆的压力 | 由垃圾回收机制控制 |
继承性 | 值类型是密封的,因此不能作为基类 | 一般有继承性 |
多态性 | 不支持多态 | 支持多态 |
装箱和拆箱
项目 | 装箱 | 拆箱 |
---|---|---|
概念 | 值类型到Object类型或到此值类型所实现的任何接口类型的隐式转换,用于在垃圾回收堆中存储值类型。 | 与装箱操作相反,从Object类型到值类型或从接口类型实现该接口的值类型的显式转换。 |
阶段 | 1.从托管堆中为新生成的引用对象分配内存。2.将值类型的实例字段拷贝到新分配的内存中。3.返回托管堆中新分配的对象的地址,改地址就是一个指向对象的引用了。 | 1.检查对象实例,确保它是给定值类型的一个装箱值。2.将该值从实例复制到值类型的变量中。 |
代码示例 | int val=100; object obj=val;//装箱 Console.WriteLine("对象的值={0}",obj);//输出结果 |
int val=100;object obj=val;//装箱int num=(int) obj;//拆箱 Console.WriteLine("num:{0}",num);//输出结果 |