使用2的幂的int值而不是常量是否有任何优势?

时间:2015-10-29 10:02:27

标签: java constants

我看到了一个java类,其int变量的值为2的幂。这样做有什么好处吗?

private static final int MODE_BICYCLE = 1;

private static final int MODE_WALK = 2;

private static final int MODE_CAR = 4;

private static final int MODE_BUS = 16;

private static final int MODE_TRAM = 32;

private static final int MODE_SUBWAY = 64;

private static final int MODE_RAIL = 128;

private static final int MODE_FERRY = 256;

private static final int MODE_CABLE_CAR = 512;

private static final int MODE_GONDOLA = 1024;

private static final int MODE_FUNICULAR = 2048;

private static final int MODE_TRAINISH = MODE_TRAM | MODE_RAIL | MODE_SUBWAY | MODE_FUNICULAR | MODE_GONDOLA;

private static final int MODE_BUSISH = MODE_CABLE_CAR | MODE_BUS;

private static final int MODE_TRANSIT = MODE_TRAINISH | MODE_BUSISH | MODE_FERRY;

private static final int MODE_ALL = MODE_TRANSIT | MODE_WALK | MODE_BICYCLE;

private int modes = 0;

2 个答案:

答案 0 :(得分:1)

正如您发布的那样,优势在于您可以输入变量。 例如:

toString()

如果你不选择2的权力,就无法做到这一点。

答案 1 :(得分:0)

这样我们就可以将它们与按位运算符或运算符组合在一起,然后再将它们分开。例如,MODE_TRAINISH = MODE_TRAM | MODE_RAIL | MODE_SUBWAY | MODE_FUNICULAR | MODE_GONDOLA;

如果我们以后想看看是否例如包括在集合中,我们可以做模式& MODE_TRAM并查看它是否为非零。

换句话说,我们在一个整数中表示一组值。这是非常节省空间的,并且测试集合成员资格(按位和),添加元素(按位或)或删除元素(按位和补充)也是时间有效的。