全部来自硬件。
字节是大多数硬件上内存的最小可寻址单元。
您刚才提到的每种类型都是从多个字节构建的。
一个字节是8位。这样一来,您可以表示8个布尔值,但不能一次只查询一个布尔值。您的地址为1,全部为8。
它曾经很简单,但是后来我们从8位总线变成了16位,32位和现在的64位总线。
这意味着尽管我们仍然可以在字节级别进行寻址,但如果不获取其相邻字节就无法再从内存中检索单个字节。
面对这种硬件,语言设计师选择允许我们选择允许我们选择适合硬件的类型的类型。
您可以声称这样的细节可以并且应该被抽象化,尤其是使用旨在在任何硬件上运行的语言。这可能会隐藏性能问题,但您可能是对的。只是没有那样发生。
Java实际上试图做到这一点。字节自动升为整数。当您第一次尝试进行任何严重的移位工作时,这一事实会让您发疯。
那为什么不能很好地工作呢?
过去,Java的最大卖点是您可以坐下来使用已知的优秀C算法,用Java键入它,并进行一些细微调整就可以使用。而且C与硬件非常接近。
保持这种状态并从整数类型中提取大小只是无法一起工作。
这样他们就可以了。他们只是没有。
也许程序员不希望某人能够使用比特定大小更大的数字,并且这使他们受到限制。
这是正确的想法。有执行此操作的方法。该钳位功能为一体。一种语言可以达到将任意界限烤成它们的类型的目的。并且在编译时知道这些界限时,可以优化这些数字的存储方式。
Java并不是那种语言。