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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李琼 中级黑马   /  2012-10-30 00:30  /  1927 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李琼 于 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. }
复制代码
求解...

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
本帖最后由 徐升兴 于 2012-10-30 00:52 编辑

  • 结果是1,先占楼
    这个题其实考的是&和&&的运算机制 还有+=的运算机制
    &是两边都要进行运算
    而&&则是左边如果为假,右边不运算,左边为真,再运算右边
    public static void methodA(int i) {
                boolean b;

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

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

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
    b = i > 10 & methodB(1);    & 在前面是false的时候还会继续后面表达式的运算,也就是会执行methodB(1),这个方法把 j 变成了1
而 b = i > 10 && methodB(2);  &&有短路效果,当判断到前面为false的时候,就不会继续判断后面表达式的值,直接返回false,所以methodB(2)  根本就没有运行到。

所以答案是  1

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 杨千里 于 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.
        }      
}
            


评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
直接上代码!
  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. }







复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马