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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 泮和顺 中级黑马   /  2012-3-2 21:39  /  2036 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  Swap
{
        public static void main(String[] args)
        {
              int x=8;
               int y=9;

                System.out.println("x="+x+",y="+y);
               // Swap_3(x,y);
                //这里使用了置换方法,为什么打印出来还是没有置换……如果不用方法,直接写在主方法里或者把输出语句放在Swap_3(int a,int b)里是可以的..请前辈解释下..
                x=x ^y;
                y=x ^y;
                x=x ^y;
                System.out.println("x="+x+",y="+y);
                                        }
                public static void Swap_3(int a,int b)
        {
               // a = a ^ b;
               // b = a ^ b;
               // a = a ^ b;
                                         

        }

}

也知道了是形式参数的问题 到底该如何改呢 JAVA没有&这些东西的

3 个回复

倒序浏览
值 的传递是单向,形参的改变不会 影响到实参,Swap_3 被调用的时候,在堆内存中生成了 2个新变量a,b.调用的时候把想x,y的值 传给形参了,在Swap_3 方法中,两值被交换了。但是Swap_3 方法运行 结束后就 会把 局部a,b变量 存储 空间 自动释放了 。调用结束,x,y的值 依然没有变啊
回复 使用道具 举报
本帖最后由 H07000223 于 2012-3-2 22:44 编辑

因为x、y值的确是赋给a、b,但是swap方法并没有把a、b最终结果返回给相应的x、y。

他们没有任何内在联系。所以。。。就这样悲剧。

最主要的他们不是对象,只是基本数据类型。你可以用数组这样做:

  1.         public static void swap(int[] i)
  2.         {
  3.                 int temp=i[0];
  4.                 i[0]=i[1];
  5.                 i[1]=temp;
  6.         }
  7.        
  8.         public static void main(String[] args)
  9.         {
  10.                 int[] i={3,4};
  11.                
  12.                 //利用数组的方式传入swap方法从达到互换的目的
  13.                 swap(i);
  14.                
  15.                 System.out.println(i[0]);
  16.                 System.out.println(i[1]);
  17.         }
复制代码
回复 使用道具 举报
public static void Swap_3(int a,int b) 此方法返回类型为void,也就是没有返回类型。把参数传进来后一通运算,运算玩了后,就完了。你是在拿机器开涮,呵呵。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马