答案 0 :(得分:5)
如果有趣的话我前段时间做过这样的测试: 测试就像(有大量的迭代):
final int[] int_array=...;
final boolean[] bool_array=...;
etc.
if (int_array[i]==67) ...
if (bool_array[i]) ...
if (float_array[i]==67.0F) ...
etc.
Time in seconds:
Desktop(64bit Windows) Device (Android)
bitmask 4.050 0.350
boolean 4.554-5.169 0.306-0.359
byte 0.583-0.915 0.263-0.293
char 0.587-0.814 0.280-0.329
short 0.583-0.914 0.280-0.290
int 0.548-0.949 0.288-0.338
float 0.824-1.129 0.965-1.035
long 0.646-1.054 0.480-0.509
double 0.828-0.971 1.138-1.214
答案 1 :(得分:3)
这取决于底层架构。通常,最快的类型将是与您的本机字大小相对应的类型:32位计算机上的32位或64位计算机上的64位。
因此,int
比32位机器上的long
更快;在{64}计算机上long
可能比int
更快,或者可能相同。至于boolean
,我认为它仍然使用原生单词大小,所以它几乎与int
或long
一样快。
双打(使用浮点运算)往往较慢。
只要您处理原始类型,差异就可以忽略不计。真正慢的类型是类类型(如Integer
或Boolean
) - 如果您想要性能,请避免使用。
答案 2 :(得分:2)
原语比对象更快,原始操作的确切速度将取决于您正在使用的JVM(并假设JIT编译为本机代码,您运行JVM的本机架构),但1 * 1和true&& false可能是现代架构上的单机指令。
如何衡量?编写一个测试,在循环中多次调用您关心的操作,然后计时。
答案 3 :(得分:2)
通常那些使用Java自动装箱机制的人往往较慢,因为JVM必须将基元类型转换为自动装箱类型。
这意味着如果您坚持使用基元,那么您将比JVM为您创建的对象更快。另外,要测量,您可以在伪代码中执行类似的操作:
start timer
do 10,000 operations on primitive/boolean
stop timer
display time
这可以帮助您衡量系统中的时差,但在多个系统中它可能相同或不同。
希望有所帮助:)干杯!