除按位AND之外,&还有其他用途吗?

时间:2019-05-29 07:15:55

标签: java operators bitwise-operators

我正在阅读Kathy和Bret撰写的SCJP 6书,并从本书第4章(操作员)中找到了一些文字

  

因为你知道   既然Java不是C ++,那么您对Java运算符通常不会感到惊讶   超载。但是,有一些特殊的运算符会过载:

  • +运算符可用于将两个数字基元加在一起,或 如果两个操作数中的任何一个为字符串,则执行串联操作。
  • &,|和^运算符都可以两种不同的方式使用,尽管 在此版本的考试中,其零序功能将不会受到测试。

我无法理解&,|的第二种用法。 Java中的和^运算符,分别不是按位AND,OR和XOR。在Java中使用&运算符的两种不同方式是什么?

1 个答案:

答案 0 :(得分:4)

&可以作为二进制AND运算符的非短路版本(不同于短路boolean运算符)应用于两个&&操作数。

|可以作为二进制OR运算符的非短路版本(不同于短路boolean运算符)应用于两个||操作数。

^(XOR)也可以应用于两个boolean操作数。

总而言之,所有3个运算符都可以用作布尔运算符(当应用于boolean操作数时)或按位运算符(当应用于整数操作数时)。

这些操作符在JLS 15.22.2.中进行了描述:

  

15.22.2。布尔逻辑运算符&,^和|

     

当&,^或|的两个操作数时运算符的类型为布尔值或布尔值,则按位运算符表达式的类型为布尔值。在所有情况下,操作数都会根据需要进行拆箱转换(第5.1.8节)。

     
      
  • 对于&,如果两个操作数值均为true,则结果值为true;否则,结果值为true。否则,结果为假。

  •   
  • 对于^,如果操作数值不同,则结果值为true;否则,结果值为true。否则,结果为假。

  •   
  • 对于|,如果两个操作数的值均为false,则结果值为false;否则,结果为false。否则,结果为true。

  •