Java中&与&&;|与||的区别

来源:互联网 发布:淘宝查看自己的退货率 编辑:程序博客网 时间:2024/04/30 13:07

&,|是位运算符:

         a&b是把ab都转换成二进制数然后再进行按位与的运算;

         a|b是把ab都转换成二进制数然后再进行按位或的运算;

&&,||是逻辑运算符,短路运算

    &&:当左表达式为false时,整体不可能为true,右表达式将不再运算;

    ||: 当左表达式为true时,整体为true,右表达式将不再运算;

也就是说在有些情况下左表达式会将右表达式“短路”。

[java] view plain copy
  1. int a = 0;  
  2. int b = 1;  
  3. if(++a>1&&--b==0){  
  4.     System.out.println("结论错误");  
  5. }  
  6. System.out.println("a:" + a + ";b:" + b);//a:1;b:1 右表达式--b==0没有运算  
  7. int c = 0;  
  8. int d = 1;  
  9. if(++c>0||--d==0){  
  10.     System.out.println("c:" + c + ";d:" + d);//c:1;d:1 右表达式--d==0没有运算  
  11. }  

这种方式可以避免一些错误的发生 

System.out.println(1!=1&&1/0==1);

System.out.println(1==1||1/0==1

上面的语句在执行时没有报错,说明后面的除0语句没有执行。

而& , | 在得到结果之前必须计算左右表达式的值。

总结:

1.& , | 为位运算符,在得到结果之前左右表达式都要进行计算;

2.&& , ||为逻辑运算符,可以减少计算量,可以避免错误的发生

    2.1&&:当左表达式为false时,整体不可能为true,右表达式将不再运算;

    2.2||: 当左表达式为true时,整体为true,右表达式将不再运算。


简而言之   |与||的区别是  |左右两部分不管为true还是false都要计算  而|| 在左部分为false时 有部分就不会进行判断

原创粉丝点击