java – 在设置一些属性时管道(|)运算符如何在Android中工作?

参见英文答案 > 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
    ...
}
上一篇:java – Lucene中的 – 和NOT运算符有什么区别?


下一篇:如何在Java中使用泛型语言运算符和扩展Number的泛型类