为什么我不经常看到它们。我只看到它们主要用于网络,其中大小确实很重要。但是,例如,我有一个仅使用1-10范围内的数字的变量,不应该使用字节吗?我习惯使用尽可能小的内存来编写C / C ++,为什么它在java中不是这样的呢?
答案 0 :(得分:10)
实际上,在大多数支持Java的处理器中,32位整数都是最快的。例如,在Intel处理器上,32位整数寄存器具有最短的操作码,而16位整数的处理速度稍慢。此外,大部分时间使用byte
或short
s都不会为您节省空间。
它与OOPness无关;即使在C中确实没有任何OOP概念,对于几乎每个数字都使用int
是很常见的,因为它的大小通常被选择为fastest width for the given architecture。
答案 1 :(得分:4)
除非它是像位掩码或内存密集型这样的低级别,每个对象占用的每个字节都很重要,即使int
可能会这样做,我也可能使用byte
。
不要忘记Java对象经常被填充以便更容易地访问JVM。所以取决于你的类中的其他字段,使用一个字节可能仍然占用与int相同的内存!见javamex's explantation of Java's memory usage
如果我知道进入那里只有10个可能的值,从OO的思维方式来看,我不会考虑使用byte
来存储它。为什么价值仅为1-10?每个值是否意味着特别的东西?
如果是这样,我可能会使用enum
并为这10个值中的每一个赋予一个意图揭示名称。