黑马程序员技术交流社区

标题: 面试题,求解. [打印本页]

作者: 李琼    时间: 2012-10-30 00:30
标题: 面试题,求解.
本帖最后由 李琼 于 2012-10-30 18:35 编辑

  1. public class Test {
  2.         public static void main(String[] args) {

  3.                 methodA(0);
  4.                 System.out.println(j);
  5.         }

  6.         private static int j = 0;

  7.         public static boolean methodB(int k) {
  8.                 j += k;
  9.                 return true;
  10.         }

  11.         public static void methodA(int i) {
  12.                 boolean b;
  13.                 b = i > 10 & methodB(1);
  14.                 b = i > 10 && methodB(2);
  15.         }
  16. }
复制代码
求解...

作者: 徐升兴    时间: 2012-10-30 00:45
本帖最后由 徐升兴 于 2012-10-30 00:52 编辑

                boolean b;

                b = i > 10 & methodB(1);//这里传进来0,0<10,为假。但是要运算右边,所以调用了methodB,传进去了1

                b = i > 10 && methodB(2);//这里还是0<10,为假,所以右边不执行,这样methidB就没有调用,
也就是说method只调用了一次,传进去了一个1
所以结果为1

作者: 马磊    时间: 2012-10-30 00:49
    b = i > 10 & methodB(1);    & 在前面是false的时候还会继续后面表达式的运算,也就是会执行methodB(1),这个方法把 j 变成了1
而 b = i > 10 && methodB(2);  &&有短路效果,当判断到前面为false的时候,就不会继续判断后面表达式的值,直接返回false,所以methodB(2)  根本就没有运行到。

所以答案是  1
作者: 杨千里    时间: 2012-10-30 01:46
本帖最后由 杨千里 于 2012-10-30 18:52 编辑

这段小代码有点唬人
public class Test {
        public static void main(String[] args) {
                   java是按顺序执行的
                // System.out.println(j); 把这个打开 你会更明白
                methodA(0);  //执行后,j的值为1;
                System.out.println(j);
}
        private static int j = 0;
        public static boolean methodB(int k) {
                j += k;   
                return true;
        }
      
        public static void methodA(int i) {
                boolean b;
                b = i > 10 & methodB(1);    //  j的值为1,  0>10为假,后面继续执行。methodB(1)方法中 j 的值为1;
                b = i > 10 && methodB(2);  //  0>10为假,短路后面不执行           所以methodB(2); 不执行
               //如果&&运算符的前面的结果为false, 无论后面的值是什么, 其结果都是false.
        }      
}
            



作者: 崔政    时间: 2012-10-30 13:19
直接上代码!
  1. package test;


  2. public class Test3 {
  3.         public static void main(String[] args) {
  4.                 methodA(0);                        //按顺序走
  5.                 System.out.println(j);//所以输出 结果为 1
  6.         }

  7.         private static int j = 0;

  8.         public static boolean methodB(int k) {
  9.                 j += k;                //j=0,k=1,j+=k,所以j=1,返回true。
  10.                 return true;
  11.         }

  12.         public static void methodA(int i) {
  13.                 boolean b;
  14.                 b = i > 10 & methodB(1);//&逻辑运算符,与,无论左边真假与否,右边都要判断,i>10为假,执行methodB(1)
  15.                                                         //通过methodB的运算,返回真,但左边已经回假,所以b现在为false,不过这无关紧要。因为是静态方法
  16.                 b = i > 10 && methodB(2);//&& 逻辑运算符,与,如果左边卫假,右边不再判断。
  17.         }
  18. }







复制代码





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