在Java中,对两个布尔值或两个两个整数进行操作会更快吗?例如,是1*1还是真&&假更快?双打怎么样?一般来说,最快的原始数据类型是什么?如何找出如何衡量这些东西的速度?
小智 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
Run Code Online (Sandbox Code Playgroud)
这将取决于底层架构。一般来说,最快的类型将是与您的本机字大小相对应的类型:32 位计算机上的 32 位,或 64 位计算机上的 64 位。
因此比在 32 位机器上int更快;可能比在 64 位机器上更快,或者可能相同。至于,我想它无论如何都会使用原生字长,所以它的速度几乎与或 一样快。longlongintbooleanintlong
双精度数(使用浮点运算)往往较慢。
只要您处理的是原始类型,差异就可以忽略不计。真正慢的类型是类类型(例如Integer或Boolean)——如果您想要性能,请避免使用这些类型。