在java中使用常量1的按位移位的优点

时间:2014-08-13 11:30:43

标签: java android bitwise-operators

在android源代码中,有类似下面的内容。在这种情况下使用按位移位有什么好的理由吗?只输入1?

会不会更简单
public static final int POP_BACK_STACK_INCLUSIVE = 1<<0;

使用以下优点或上述优点有什么缺点?

public static final int POP_BACK_STACK_INCLUSIVE = 1;

2 个答案:

答案 0 :(得分:4)

这不是为了提高性能,而是为了维护代码。

编译时,编译器会计算常量表达式,此常量将存储为1

但是将来,当这个常量应该通过移位来改变时,维护者只需将0更改为源代码中的另一个数字。

Shift运算符只是向维护者显示,该转换操作可以在将来的版本中用于此常量。

答案 1 :(得分:2)

这两个版本都没有性能优势。在第一种情况下,1<<0表达式在编译时进行评估,Java和Dalvik字节码实际上只使用常量1 ....在这两种情况下。

真正的原因是要记录这是一个&#34;位标志&#34;值。将表达式写为1<<0表示该标志的位设置为零。


请注意,此不会为开发人员提供在未来某个版本中更改转换的选项。 POP_BACK_STACK_INCLUSIVE是一个公共编译时常量,因此更改它可能会导致二进制兼容性问题。具体来说,针对不同版本的Android编译的代码将具有不同的常量值。这可能会使应用程序在不同的Android版本中不可移植;即,您需要为不同版本提供不同版本的应用程序。