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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王--明 黑马帝   /  2012-1-16 11:31  /  2464 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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);  
                        }

8 个回复

倒序浏览
1.输出结果为:
  7
2.b = i < 10 || methodB(12);   这句并不是没有执行,而是只执行了i<10的判断,这边使用的是“||”(短路或),i<10结果已经是true,所以整个表达式的结果也为true,就不会再进行 methodB(12)的判断。(搞清楚:| 与 || 的区别,就知道了)
回复 使用道具 举报
短路和非短路是否执行逻辑运算符后的的程序段的问题而已。
回复 使用道具 举报
百度一下| 与 || 的区别
回复 使用道具 举报
仔细分析下就知道了,b = i < 10 || methodB(12);   这段代码执行了,只是判断了i(0)<10之后就返回了true,剩下的methodB(12)没有执行。
||用法:具有短路效果,如果前半是true,表达式结果一定为true,不运行后一半
回复 使用道具 举报
短路运算符|和||的区别!
回复 使用道具 举报
王杰 黑马帝 2012-1-16 17:51:18
7#
以后遇到问题先百度或谷歌,那样对自己更有好处..呵呵,,你去百度一下楼上说的|和||的区别吧?
回复 使用道具 举报
魏腾飞 黑马帝 2012-1-16 19:15:06
8#
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:38
9#
||这个短路或,只要一个假就直接返回假,例如第一个计算为假就直接返回假,不会再判断后面的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马