鄙人最近开始自学C#,在学习的过程中听到有的老师说,声明变量的时候最好按照变量的大小,声明对应的变量。        例如,记录年龄的话,就用byte因为byte范围最小,一个人的年龄怎么都不会超过255。       问题就在于,我学习时所接触到的所有教材、视频等资料,都没有看到有人特地把年龄这个变量声明成byte,大部分都是直接声明成int。所有有点纠结到底该怎么办。        P.S:声明小的变量能够节约空间这个道理我是明白的,但是会不会int数据类型在运算的时候更快所以他的优点胜过了缺点才让大家都一直还是用int声明年龄。还是说只是大家都习惯用int,而忽略了可能浪费的空间。求解惑,谢谢各位宝贵的时间!

解决方案 »

  1.   

    使用 byte 来实现年龄是完全可以的。你说说看,纠结 byte 和 int 的占用空间的大小,究竟是会值几分钱价值呢?说不明白了这个就没有必要纠结。任何程序都有要重构的那天,有几万件更重要的使其能够要决定,不要在这方面过多浪费时间。就占用几个字节空间方面,byte 永远都比 long 小,但是并不证明 byte 就比 long 能值100分钱。
      

  2.   

    比如说,有的人非要把多个数值字段拼到一个字符串中,然后读取和更改值的时候再写一堆代码来拆分字符串、拼接字符串、更新字符串等等操作。假设并不需要按照这些数值字段进行索引,这个时候最垃圾的可能也并不是“性能”问题,而是这样写代码在逻辑上容易混乱、难以维护和扩展等等问题。也就是基本的范式问题。你看范式问题并不纠结是 byte 还是 int 或者 long,而是纠结一个独立的对象实体有没有一个主键、是否属性仅仅依赖一个(而不是多个)主键等问题。也就是说,不同的人纠结的问题是不同的,你看一个人纠结什么往往可以看到一个人的“爱好”,从而知道其价值。当一个人把繁琐当作高级的时候,比如说喜欢拼多个字段成为一个字符串字段的时候,你就知道其“工程方面”经常把一个稍微复杂的程序的千变万化的业务逻辑修改需求弄的像泥潭一样。所以工程方面的经验才是最重的实践判断。
      

  3.   

    这只是个如何评价的问题,也是个个人喜好问题
    就好比 gbk 要比 utf-8 节省 1/3 空间、时间,不还是有很多人嗤之以鼻吗?
      

  4.   

    相比于工程上混乱地以违反范式方式来“设计”造成费用问题而言,那么选择 byte 还是 int 的费用可以说是 0。假设是设计上很乱,那么受到不好影响的是“人”、是项目的长远的工程组织和管理、项目扩展的价值。而几分钱价值的性能一般应用中根本不会给“人”造成可测量的感觉。当然说 byte 更节省空间,这永远都是对的。纠结于 byte 操作要比 int 谁快谁慢的问题,等于是埋头只顾同一个级别的问题。在这个级别中纠结的时候才有意义。
      

  5.   

    要求很多 byte 求和并且合计大于255的时候,编程者就会写.Sum(x=> (int)x)了。
      

  6.   

    年龄怎么都不会超过255
    但是如果你只记录年龄的话,显然是不合适的,因为这样一来就得每年调整一次一旦你发现 byte 不能存储生日时,就要付出极大的代价了
      

  7.   

    用int与byte之间表示区别不是很大,不要太去在意这些东西,它仅仅只是数值表示范围的问题,而且一个人年龄怎么也不可能超过255岁 但是使用byte类型对于32bit的机器反倒效率会比直接用int低一点 但区别不是很大,它主要是CPU寻址位宽的问题 。