A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汪显晟 初级黑马   /  2013-9-20 21:30  /  1457 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 留不下什么 于 2013-9-21 13:48 编辑

&和&&的区别:
&& 当两边都为true与&没有区别;
当左边为true的时候与 & 也没有区别;
当左边为false的时候,则不需要右边参与运算,其结果一定为false;
& 和 && 都是两边都为true的时候才为true,只要有一边是false,就为false;
| 和 ||的区别:
||   当两边都为false的时候与 | 没有区别;
当左边为false的时候,与 | 也没有区别;
当左边为true的时候,那么右边不再需要进行运算,其结果一定为true;
| 和 || 都是两边都为false的时候才为false,只要有一边为true,就为true;

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1

查看全部评分

3 个回复

正序浏览
学习了,楼主多多分享好东西
回复 使用道具 举报
好吧,看到楼主这么好心的把这个问题解释出来,我也来顶顶帖子,发表一下我的看法。
之前一直觉得这个两种表达方式有什么区别么,短路(&&和||)和常规与或逻辑(&和|)反正都是判断表达式的对错。后来我看到一个问题和答案,才知道这种想法是错误的。因为对于java来说,&&和||后面可以是简单的布尔表达式,也可能是一个赋值语句甚至是一个布尔型函数,这样子一段代码的执行与否就有区别了。
我还是把问题写一下吧,这是当初云五的一个问题:
求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
  1. class SumN {
  2.     private int result = 0;
  3.     private int sum;
  4.   
  5.     public int cal(int sum) {
  6.         this.sum = sum;
  7.         getSum(0);
  8.         return result;
  9.     }

  10.     public boolean getSum(int i) {
  11.         result = result + i;
  12.         boolean tag = (i != sum) && (getSum(i+1));
  13.         return tag;
  14.     }
  15. }

  16. public class Test {
  17.      public static void main(String[] args) {
  18.         SumN sumN = new SumN();
  19.         System.out.println(sumN.cal(100));
  20. }
  21. }
复制代码
这里利用短路的方式作为判断循环结束的条件,体现了短路在某些情况下的作用,当然这个问题是人为设定了比较严格的要求,但是一样可以作为我们的参考,也许在某些 特殊的情况下,短路也是比较有用的。

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马