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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© likairoudou 中级黑马   /  2013-6-15 10:47  /  2216 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

复制代码

  1. <P>public class Test </P>
  2. <P>{ private static int j = 0;</P>
  3. <P> private static boolean methodB(int k) { </P>
  4. <P>j += k; </P>
  5. <P>return true; </P>
  6. <P>}</P>
  7. <P> public static void methodA(int i){</P>
  8. <P> boolean b; </P>
  9. <P>b = i < 10 | methodB(4);</P>
  10. <P> b = i < 10 || methodB(8); </P>
  11. <P>} </P>
  12. <P>public static void main (String args[]){</P>
  13. <P> methodA(0);</P>
  14. <P> System.out.println(j); </P>
  15. <P>}</P>
  16. <P>}</P>
复制代码
为啥 是4的 而不是8的。。。

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1

查看全部评分

5 个回复

倒序浏览
  1. public class Test { private static int j = 0; private static boolean methodB(int k) { j += k; return true; } public static void methodA(int i){ boolean b; b = i < 10 | methodB(4); b = i < 10 || methodB(8); } public static void main (String args[]){ methodA(0); System.out.println(j); }}
复制代码
回复 使用道具 举报
是 | 和 ||的区别的问题
  1. public class Test {
  2.         private static int j = 0;
  3.         private static boolean methodB(int k)
  4.         {
  5.                 j += k;
  6.                 return true;
  7.                 }
  8.         public static void methodA(int i){
  9.                 boolean b;
  10.                 //单个|的话两边都参与运算
  11.                 b = i < 10 | methodB(4);
  12.                 //两个||,如果左侧为真则右侧不参与运算,因为结果肯定是真
  13.                 //如果把下面的也改成 | 的话,结果就是12了。因为上面的两侧运算,j变成4,下面的运算后加8变成12
  14.                 b = i < 10 || methodB(8);
  15.                 }
  16.         public static void main (String args[]){
  17.                 methodA(0);
  18.                 System.out.println(j);
  19.                 }
  20.         }public class Demo2 {
  21.         private static int j = 0;
  22.         private static boolean methodB(int k)
  23.         {
  24.                 j += k;
  25.                 return true;
  26.                 }
  27.         public static void methodA(int i){
  28.                 boolean b;
  29.                 //单个|的话两边都参与运算
  30.                 b = i < 10 | methodB(4);
  31.                 //两个||,如果左侧为真则右侧不参与运算,因为结果肯定是真
  32.                 //如果把下面的也改成 | 的话,结果就是12了。因为上面的两侧运算,j变成4,下面的运算后加8变成12
  33.                 b = i < 10 || methodB(8);
  34.                 }
  35.         public static void main (String args[]){
  36.                 methodA(0);
  37.                 System.out.println(j);
  38.                 }
  39.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Super_Class + 1

查看全部评分

回复 使用道具 举报
逻辑运算符执行的是短路求值
所谓短路,就是当参与运算的一个操作数已经足以推断出这个表达式的值的时候,另外一个操作数(有可能是表达式)就不会执行

位操作没有这一特性,所以不管那边的值是如何,任何参与运算的表达式都会被执行求值,因此也就产生了你代码之中的结果了。
回复 使用道具 举报
嗯嗯嗯 谢谢啦  给搞混了这俩。。
回复 使用道具 举报
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马