Bool, Sbyte,Int16(short), Int32(int),Int64(long) ,Single(float),Double(double),Decimal(decimal)
大家有没有找到共同点?
首先C#都是字节为基础,哪怕底层更小的单位是 bit,所以最低就是1字节=8bit, 所以可以分别这里的规律为 2^0, 2^1, 2^2, 2^3,2^4 个字节
2^0字节=1字节=8bit=Int8=Sbyte
2^1字节=2字节=16bit=Int16=short
2^2字节=4字节=32bit=Int32=int
同理推出其他Int64 和 Decimal 的字节数 与 bit数
所以说int 类型是32位,其实是 32bit 的简称,同样也可以简称short为16位
问题: bool 值占多少字节 多少位
推理: bool 只有true与false,只需要1位即可标识, 但是 C#最小1字节,所以最少1字节
答案: bool = 1字节=8位
Char:C#中确定了长度为 16位,但是 C语言 是 1个字节,也就是可以标识成 UByte = 256个 英文字符,也足够用了
但是 C#统一成2个字节 16位,可能是为了兼容,不去讨论
还有个特殊的类型:String
String:一直被诟病是 基础类型 还是引用类型,但是C# 明确给String定义成引用类型
所以这时候划分 基础类型与引用类型的区分标准是什么?
1.地址,是否需要堆山分配及同步块索引
2.装箱拆箱
3.唯一hash值
结果发现 其满足1, 2 而不满足3,也就是说 “abc” == "abc",但是其可以进行 lock("abc")全局使用,虽然危险
所以说大家可以当作其为基础类型,顶着引用类型的皮而已
可能最大的原因就是 全局很多都使用相同字符串,尤其是 Dictionary<> 中的key,如果不设计成特殊形式,那么就完蛋,但是其内部又是一个字符数组,对象的形式创建,所以可以得到,对于 CPU是基础类型,对于内存是引用类型
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。