我引用Herbert Schildt的第3章数据类型,变量和数组:
基元类型表示单个值而不是复杂对象.虽然Java完全是面向对象的,但原始类型却不是.这种效率的原因.制作原始类型会使性能降低太多.
原始类型被定义为具有明确的范围和数学行为.诸如C,C++之类的语言允许整数的大小根据执行环境的指示而变化.但是,Java是不同的.由于Java的可移植性要求,所有数据类型都具有强烈定义的范围.例如,无论特定平台如何,int总是32位.这允许编写保证在不移植任何机器架构的情况下运行的程序.虽然严格指定整数的大小可能会导致某些环境中的性能损失很小,但为了实现可移植性,这是必要的.
他最后两行是什么意思?如何指定整数的大小可能会导致某些环境中的性能损失很小?
在"较低"语言中,原始数据类型大小通常来自CPU处理它们的能力.例如,在c中,a int被定义为"大小至少为16位",但是其大小可以在架构之间变化,以便确保"类型int应该是目标处理器最有效的整数类型. " (来源).这意味着如果您的代码对int大小进行粗心的假设,如果将它从32位x86移植到64位powerpc,它可能会破坏.
如上所述,java是不同的.int例如,An 将始终为32位.这意味着当您在不同的体系结构上运行相同的代码时,您不必担心其大小更改.如上所述,权衡是性能 - 在任何本身不处理32位计算的架构上,这些int需要扩展到CPU可以处理的本机大小(这会有一个小的惩罚),或者更糟,如果CPU只能处理较小的ints,则每个操作都int可能需要多次CPU操作.