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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢威 中级黑马   /  2013-7-3 12:34  /  1681 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢威 于 2013-7-3 16:55 编辑

Java函数中参数传递的时候,如果参数是基本类型,将按值传递,如果是对象将按引用传递

   void   swap(Integer   a,Integer   b)  
    {  
       Integer   t   =   new Integer(a);  
        a   =   b;  
        b   =   t;     
    }

    Integer a = new Integer(1);
    Integer b = new Integer(2);
    System.out.println("交换前"+a+ "       "+b);//1 2
    swap(a,b);     
    System.out.println("交换后"+a+ "       "+b);//1 2
    可是,结果为
     
       交换前1       2
       交换后1       2
   
    交换两个整形的值除了用数组外还有有别的解决办法没有。

7 个回复

倒序浏览
这个真有 用^可以实现交换的目的
a = a^b;
b = a^b;  
a = a^b;  


回复 使用道具 举报
方法有点笨,但是我想原理应该都懂
int x=23;
int y=67;
x=x+y;// 现在x变成了两者之和
y=x-y;// 现在y=(x+y)-y 等于 y=x,换值成功
x=x-y;// 现在x=(x+y)-y 等于 x=(x+y)-x因为刚才y已经变成x的值了,等于x=原来的y值,换值成功   
System.out.println("x="+x+" y="+y);
回复 使用道具 举报
swap方法中的a、b、t都是局部变量,在swap方法调用完毕后,这三个变量的内存都被释放了,
main函数中的a、b的值实际上并未改变,他们仍指向原来的Integer对象,所以两次输出的结果是一样的
回复 使用道具 举报
x=x+y;
y=x-y;
x=x-y;
或者
x=x^y;
y=x^y;
x=x^y
或者
int a=x;
x=y;
y=a;
毕老师的第2课中提到了
回复 使用道具 举报
好吧,楼主,你是全局变量和局部变量搞混了。。。。
我来帮你分析分析:


回复 使用道具 举报
  1. 这样不就行了,原因楼上有几楼都说了,只是将传递进函数的值进行了交换,实际上的没换
  2. static void swap(Integer a,Integer b)  
  3.     {  
  4.        Integer t = new Integer(a);  
  5.         a = b;  
  6.         b = t;
  7.         System.out.println("交换后"+a+ "       "+b);//2 1
  8.     }
  9.         public static void main(String[] args)
  10.         {
  11.             Integer a = new Integer(1);
  12.             Integer b = new Integer(2);
  13.             System.out.println("交换前"+a+ "       "+b);//1 2
  14.             swap(a,b);
  15.         }
  16.        
复制代码
回复 使用道具 举报
鉴于10分以下,我们会酌情加分
10分以上的朋友,请提一些有水平的问题,不然不加分
少年们,努力吧:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马