一、数据类型分类
值类型(Value Types)
-
直接存储数据本身,分配在栈内存
-
包括:
-
简单类型:整数(
int
/byte
等)、浮点(float
/double
)、布尔(bool
)、字符(char
) -
结构类型:
struct
定义的自定义复合类型 -
枚举类型:
enum
定义的命名常量集合
引用类型(Reference Types)
-
存储数据的内存地址,数据本身在堆内存
-
包括:
-
类(
class
)、接口(interface
)、数组(int[]
等) -
特殊内置类型:
string
(不可变字符串)、object
(所有类型基类) -
动态类型:
dynamic
(运行时类型检查)
二、值类型 vs 引用类型核心差异
特性 | 值类型 | 引用类型 |
---|---|---|
存储位置 | 栈内存 | 堆内存(栈存引用地址) |
赋值行为 | 复制完整数据(独立副本) | 复制引用(共享同一对象) |
默认值 | 各类型预设(如int 默认为0) | null |
内存管理 | 作用域结束自动释放 | 由垃圾回收器(GC)管理 |
三、常用数据类型详解
整型
byte b = 255; // 无符号8位(0~255)
int i = -2147483648; // 有符号32位
long l = 9223372036854775807L; // 64位需加L后缀
浮点型
float f = 3.14f; // 单精度(需f后缀)
double d = 3.1415926; // 双精度(默认)
布尔与字符
bool flag = true; // 仅true/false
char c = 'A'; // Unicode字符(单引号)
字符串
string s1 = "Hello"; // 不可变引用类型
string s2 = @"C:\Path"; // 逐字字符串(忽略转义)
四、类型转换机制
隐式转换
小范围类型→大范围类型自动转换(如int
→long
)
int num = 100;
long bigNum = num; // 自动转换
显式转换
强制类型转换或使用Convert
类
double pi = 3.14;
int intPi = (int)pi; // 截断小数部分
装箱与拆箱
值类型与object
间转换
int x = 123;
object obj = x; // 装箱(值→引用)
int y = (int)obj; // 拆箱(引用→值)
注意:
- 值类型适合小型高频访问数据,引用类型适合复杂对象
- 字符串操作优先使用
StringBuilder
避免频繁内存分配 - 使用
var
隐式类型推断需确保初始化表达式类型明确
如需测试类型尺寸,可用sizeof
方法:
Console.WriteLine($"int大小: {sizeof(int)}字节"); // 输出4