我看到了一个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;
答案 0 :(得分:1)
正如您发布的那样,优势在于您可以输入或变量。 例如:
toString()
如果你不选择2的权力,就无法做到这一点。
答案 1 :(得分:0)
这样我们就可以将它们与按位运算符或运算符组合在一起,然后再将它们分开。例如,MODE_TRAINISH = MODE_TRAM | MODE_RAIL | MODE_SUBWAY | MODE_FUNICULAR | MODE_GONDOLA;
如果我们以后想看看是否例如包括在集合中,我们可以做模式& MODE_TRAM并查看它是否为非零。
换句话说,我们在一个整数中表示一组值。这是非常节省空间的,并且测试集合成员资格(按位和),添加元素(按位或)或删除元素(按位和补充)也是时间有效的。