值类型和引用类型
在开始学习C#中的数据类型之前,理解C#把数据类型分为两种是非常重要的,这个问题经常会在一些面试题中出现。所以要理解清楚;
从概念上看,其区别是值类型直接存储其值,而引用类型存储对值的引用。
值类型默认分配在栈上,但可以通过装箱操作将值类型数据复制到堆上,但引用类型仅能被clr分配到堆中。
引用类型的数据保存在堆中,但引用地址保存在栈上。
注意区分某个类型是值类型还是引用类型,因为这种存储位置的不同会有不同的影响;
int是值类型,这表示下面的语句会在内存的两个地方存储值20
// i and j 都是值类型i = 20; j = i;
如果变量是一个引用,就可以把其值设置为null,表示它不引用任何对象 y = null;
值类型主要由两类组成:
-
结构
-
枚举
结构分为以下几类:
-
Numeric(数值)类型
-
整型
-
浮点型
-
decimal
-
-
bool
-
用户定义的结构。
预定义的值类型
1. 整型
C#支持8个预定义整数类型,如表所示。
| 名 称 | CTS 类 型 | 说 明 | 范 围 |
| sbyte | System.SByte | 8位有符号的整数 | –128~127 (–27~27–1) |
| short | System.Int16 | 16位有符号的整数 | –32 768~32 767 (–215~215–1) |
| int | System.Int32 | 32位有符号的整数 | –2 147 483 648~2 147 483 647(–231~231–1) |
| long | System.Int64 | 64位有符号的整数 | –9 223 372 036 854 775 808~9 223 372 036 854 775 807(–263~263–1) |
| byte | System.Byte | 8位无符号的整数 | 0~255(0~28–1) |
| ushort | System.Uint16 | 16位无符号的整数 | 0~65535(0~216–1) |
| uint | System.Uint32 | 32位无符号的整数 | 0~4 294 967 295(0~232–1) |
| ulong | System.Uint64 | 64位无符号的整数 | 0~18 446 744 073 709 551 615(0~264–1) |
2. 浮点类型
| 名 称 | CTS 类 型 | 说 明 | 位 数 | 范围(大致) |
| float | System.Single | 32位单精度浮点数 | 7 | ±1.5 × 10-45~±3.4 × 1038 |
| double | System.Double | 64位双精度浮点数 | 15/16 | ±5.0 × 10-324~±1.7 × 10308 |
3. decimal类型
| 名称 | CTS 类 型 | 说明 | 位数 | 范围(大致) |
| decimal | System.Decimal | 128位高精度十进制数表示法 | 28 | ±1.0×10-28~±7.9 × 1028 |
4. bool类型
| 名称 | CTS 类 型 | 说 明 | 位数 | 值 |
| bool | System.Boolean | 表示true或false | NA | true或false |
5. 字符类型
| 名 称 | CTS 类 型 | 值 |
| char | System.Char | 表示一个16位的(Unicode)字符 |
引用类型的变量又称为对象,可存储对实际数据的引用
预定义的引用类型
| 名 称 | CTS 类 | 说 明 |
| object | System.Object | 根类型,CTS中的其他类型都是从它派生而来的(包括值类型) |
| string | System.String | Unicode字符串 |
1万+

被折叠的 条评论
为什么被折叠?



