在android源代码中,有类似下面的内容。在这种情况下使用按位移位有什么好的理由吗?只输入1?
会不会更简单public static final int POP_BACK_STACK_INCLUSIVE = 1<<0;
使用以下优点或上述优点有什么缺点?
public static final int POP_BACK_STACK_INCLUSIVE = 1;
答案 0 :(得分:4)
这不是为了提高性能,而是为了维护代码。
编译时,编译器会计算常量表达式,此常量将存储为1
但是将来,当这个常量应该通过移位来改变时,维护者只需将0
更改为源代码中的另一个数字。
Shift运算符只是向维护者显示,该转换操作可以在将来的版本中用于此常量。
答案 1 :(得分:2)
这两个版本都没有性能优势。在第一种情况下,1<<0
表达式在编译时进行评估,Java和Dalvik字节码实际上只使用常量1
....在这两种情况下。
真正的原因是要记录这是一个&#34;位标志&#34;值。将表达式写为1<<0
表示该标志的位设置为零。
请注意,此不会为开发人员提供在未来某个版本中更改转换的选项。 POP_BACK_STACK_INCLUSIVE
是一个公共编译时常量,因此更改它可能会导致二进制兼容性问题。具体来说,针对不同版本的Android编译的代码将具有不同的常量值。这可能会使应用程序在不同的Android版本中不可移植;即,您需要为不同版本提供不同版本的应用程序。