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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马19我最牛 中级黑马   /  2013-3-23 23:59  /  1980 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class test1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a=4;
  6.                 int b=5;
  7.                 b -= a = (b += a) - a;
  8.                 System.out.println(a+"....b="+b);
  9.         }
  10. }
复制代码
这是刚才一个同学问的,怎么样用一行代码把a和b的只调换,然后想出来了b -= a = (b += a) - a;这个,可是计算结果是b等于0,
我想的是括号里面的是把b和a的值赋值给b也就是4+5=9赋值给b,然后用b-a赋值给a也就是9-4=5赋值给a,得出a=5,然后算前面的b-=a,也就是b-a赋值给b,即9-5=4赋值给b,最后得出结果是4,但是计算机计算的结果是0.想不明白,知道是优先级的问题, 问题出在(b += a),难道这里不赋值给b吗?

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-24 11:39

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
b -=|a = |(b += a) - a  
应该是| |里面赋值不对吧!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
互换可以有三种方法:
方法1:
class test1
{
        public static void main(String[] args)
        {
                        int a=4;
                        int b=5;
                        int temp;
                        temp = a;
                        a = b;
                        b = temp;
                        System.out.println("a="+a+";"+"b="+b);
        }
}

方法2:用这段代码将红色标红部分代码替换。
                        a = a+b;
                        b = a-b;
                        a = a-b;
方法3:用这段代码将红色标红部分代码替换。
                        a = a^b;
                        b = a^b;
                        a = a^b;

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
lixiaofeng 发表于 2013-3-24 01:11
互换可以有三种方法:
方法1:
class test1

嗯,现在不说互换的问题,现在是说优先级的问题!
回复 使用道具 举报
b= b+a    b=9         a=b-a    a=5   后边的b赋值给a后销毁了   b=b-a   b=0
回复 使用道具 举报
class test1

{

        public static void main(String[] args)
        {

                int a=4;
               int i=4;
                int j=5;
                int b=5;
               j -= i = (j += i) - i;
                b=b+a;
                 a=b-a;
            b=b-a;

           System.out.println(a+"....b="+b);
         System.out.println(i+"....j="+j);

        }

}

D:\Java and Jsp\ch>java test1
5....b=4
5....j=0      

点评

请不要刷帖,谢谢  发表于 2013-3-24 11:36
回复 使用道具 举报
xuqangxing 发表于 2013-3-24 10:42
b= b+a    b=9         a=b-a    a=5   后边的b赋值给a后销毁了   b=b-a   b=0

销毁?意思是它就没有把9赋值给b?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马