参见英文答案 > What does the pipe character do in a Java method call? 3个
我的问题可能是基本的,但我想知道管道运算符如何在Android中的以下上下文中工作:
我们可以在布局中设置多个输入类型:
android:inputType = "textAutoCorrect|textAutoComplete"
我们可以为intent设置多个标志,如下所示:
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION|Intent.FLAG_ACTIVITY_CLEAR_TOP);
我们还可以设置一些属性如下:
tvHide.setPaintFlags(tvHide.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
我们可以在多个实例中看到Android中的此类示例.
所以我的问题是,是吗?运算符的行为类似于按位OR运算符,还是只是将结果或其他内容连接起来?
如果它的作用类似于按位OR运算符,那么它如何使预期结果正确?有人可以开导我这个吗?
解决方法:
是的,它是一个按位包含OR运算,主要用于设置标志(documentation).考虑以下标志:
byte flagA = 0b00000001;
byte flagB = 0b00000100;
如果我们使用|运算符,这两个标志组合在一起:
byte flags = flagA | flagB; // = 0b00000101
这允许我们在少量内存中设置属性或其他一小部分状态信息(通常是具有大多数Android标志的Integer).
注意,标志应该只有一个比特“有效”,即具有等于2 ^ n的值.这就是我们在使用按位AND运算符检查组合标志持有者变量时已知设置的标志的方法,例如,
if ((flags & flagA) == flagA) {
// Flag A has been set
...
}