黑马程序员技术交流社区

标题: 求指教!输出结果为什么是4呢 [打印本页]

作者: 马林贺    时间: 2012-5-24 16:34
标题: 求指教!输出结果为什么是4呢
        //定义静态变量 i
        static int i=0;
       
        //创建方法返回  true
       
        static boolean meb(int j)
        {
                i+=j;
                return true;
        }
       
        //创建方法  判读  
        static void  mea(int j)
        {
                boolean g;
                g=j<10|meb(4);    //不理解这里,两个返回的不都是真吗?
                g=j<10||meb(8);   //为什么输出的结果是 4 呢?
               
               
        }
       
        public static void main(String[] args) {
               
               
                //调用方法  
                mea(0);
               
                System.out.print(i);

        }

   我以为输出的结果是12 呢。
作者: 小小企鹅    时间: 2012-5-24 16:45
g=j<10|meb(4);    // |位操作符 不管左边条件表达式是不是成立都执行
g=j<10||meb(8);   // ||逻辑操作符 j<10为true不继续执行
作者: 马林贺    时间: 2012-5-24 16:49
栗培文 发表于 2012-5-24 16:45
g=j

g=j<10||meb(8);   // ||逻辑操作符 j<10为true   true  不是执行吗?  False  才是不执行吗?
作者: niceBoy    时间: 2012-5-24 16:50
g=j<10|meb(4);    //不理解这里,两个返回的不都是真吗?
|位操作符 不管左边条件表达式是不是成立都执行
g=j<10||meb(8);   //为什么输出的结果是 4 呢?
||逻辑操作符 只要左边成立,右边就不执行(多余)
作者: 田建    时间: 2012-5-24 16:54
嗯,主要是要区分开|和||的区别,|是在任何情况下都会执行前后的的程序;但||在前为真时,后面的程序不会执行;就如&和&&,&前后都会执行,而&&在前为假时,后面的程序不会执行!
作者: 袁錦泰    时间: 2012-5-24 16:55
马林贺 发表于 2012-5-24 16:49
g=j

你记错了。那时&&
作者: 陈栋    时间: 2012-5-24 16:55
|位运算符不管什么情况左右两边均执行;||运算符有短路作用如果左边成立右边则不继续执行,所以第二条中meb(8)没有执行
作者: 马林贺    时间: 2012-5-24 16:56
niceBoy 发表于 2012-5-24 16:50
g=j

   理解了,因为左边已经是 真了,
  所以就不执行右边了,要是左边是  假  的话才执行对吧。
  如果是 j>10  结果就是12 了吧。  
作者: 马林贺    时间: 2012-5-24 16:57
  懂了,谢谢大家了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2