前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >c#基础类型思考(1)

c#基础类型思考(1)

原创
作者头像
洪移潮
修改2024-11-22 10:06:00
修改2024-11-22 10:06:00
1040
举报
文章被收录于专栏:C#从中级到高级C#从中级到高级

一:基础值类型

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是基础类型,对于内存是引用类型

三:思考值类型在调用 ToString(),是否需要装箱拆箱: 如 1.ToString()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:基础值类型
  • 二:基础字符类型
  • 三:思考值类型在调用 ToString(),是否需要装箱拆箱: 如 1.ToString()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档