逻辑与&&和位与&的一点区别说明

来源:互联网 发布:淘宝买家一颗五星 编辑:程序博客网 时间:2024/06/05 09:06
我们都知道位运算除了可以对二进制数进行操作之外,还可以对布尔型值进行运算。如我们这里要说的&运算:
除了1& 1 为1外,其他的都是0,还有true&true为true外,其他的都为false,逻辑与&&和位与&对布尔型值得操作很相似。
这里特别指出他们的不同之处:
有如下的code
  1. int iNum = 0;  
  2.         int age = 60;  
  3.         result = age > 64 && ++iNum < 100;  
  4.         System.out.println(result);  
  5.         System.out.println(iNum);  
  6.           
  7.         result = age > 64 & ++iNum < 100;  
  8.         System.out.println(result);  
  9.         System.out.println(iNum);  

打印的结果如下:
  1. false  
  2. 0  
  3. false  
  4. 1  

这样很显然两者的区别就一目了然了。
&&运算一旦发现它的左操作数为false时,就不会再去执行它右操作数。即前面的++iNum根本就没有做任何的操作

而&这种运算符,在执行与运算之前它会计算所有操作数的值,即后面的++iNum是被执行过了的。

于是就有

  1. String s = null;  
  2.         boolean result = s!= null && s.length() > 5;  

编译能过,而
[html] view plaincopy
  1. result = s!= null & s.length() > 5;  

出现空指针异常的错误。

同样的规则适用于||和|

0 0
原创粉丝点击