黑马程序员技术交流社区

标题: 求教高手帮我看下这个问题 [打印本页]

作者: 王--明    时间: 2012-1-16 11:31
标题: 求教高手帮我看下这个问题
1:下面一道程序问题,看了很多解法,有一个疑问,这道题的结果,到底是多少。请教各位大侠们,帮我解惑。      
2:b = i < 10 || methodB(12);      这句话为什么没有执行到?

                                                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(7);
                                                b = i < 10 || methodB(12);  
                        }
                        public static void main(String[] args)
                        {
                                                methodA(0);
                                                System.out.println(j);  
                        }

作者: 刘基军    时间: 2012-1-16 11:54
1.输出结果为:
  7
2.b = i < 10 || methodB(12);   这句并不是没有执行,而是只执行了i<10的判断,这边使用的是“||”(短路或),i<10结果已经是true,所以整个表达式的结果也为true,就不会再进行 methodB(12)的判断。(搞清楚:| 与 || 的区别,就知道了)
作者: 刘明瑞    时间: 2012-1-16 12:44
百度一下| 与 || 的区别
作者: Joyuang    时间: 2012-1-16 16:13
仔细分析下就知道了,b = i < 10 || methodB(12);   这段代码执行了,只是判断了i(0)<10之后就返回了true,剩下的methodB(12)没有执行。
||用法:具有短路效果,如果前半是true,表达式结果一定为true,不运行后一半
作者: 小白    时间: 2012-1-16 17:50
短路运算符|和||的区别!
作者: 王杰    时间: 2012-1-16 17:51
以后遇到问题先百度或谷歌,那样对自己更有好处..呵呵,,你去百度一下楼上说的|和||的区别吧?
作者: 魏腾飞    时间: 2012-1-16 19:15
public class ProblemDemo {   //
        private static int j = 0;
        private static boolean methodB(int k)
        {
                                j += k;
                                return true;
        }
        public static void methodA(int i)  //第二步:执行静态方法区的methodA(),同时将i=0赋值。
        {
                                boolean b;
                                b = i < 10 | methodB(7);//第三步:
                                b = i < 10 || methodB(12);  //没有执行
        }
        public static void main(String[] args)
        {
                                methodA(0);//第一步:调用静态方法methodA()传入0.
                                System.out.println(j);  
                                System.out.println((true|true));
        }

}
看到这个题目,尤其是两个符号“|”和"||"觉得长见识了。(长见识的理由)| :(不太明确)当两边操作数的位有一边为1时,结果为1;但是该运算符还能操作逻辑运算。应该属于运算符两侧都必须执行(不太确定。我第一次碰见···)||:或(逻辑运算符),指的是两个条件符合一个就ok,在有些情况下,如果(条件1)||(条件2)当条件1是true时,条件2的运算可以直接略过不计算。

作者: 沈样    时间: 2012-1-19 19:27
||这个短路或,只要一个假就直接返回假,例如第一个计算为假就直接返回假,不会再判断后面的




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