在java中布尔值或整数运算速度更快?

Dav*_*vid 5 java optimization

在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)


mgi*_*uca 3

这将取决于底层架构。一般来说,最快的类型将是与您的本机字大小相对应的类型:32 位计算机上的 32 位,或 64 位计算机上的 64 位。

因此比在 32 位机器上int更快;可能比在 64 位机器上更快,或者可能相同。至于,我想它无论如何都会使用原生字长,所以它的速度几乎与或 一样快。longlongintbooleanintlong

双精度数(使用浮点运算)往往较慢。

只要您处理的是原始类型,差异就可以忽略不计。真正慢的类型是类类型(例如IntegerBoolean)——如果您想要性能,请避免使用这些类型。