黑马程序员技术交流社区

标题: 关于方法中参数的传递问题 [打印本页]

作者: 谢威    时间: 2013-7-3 12:34
标题: 关于方法中参数的传递问题
本帖最后由 谢威 于 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
   
    交换两个整形的值除了用数组外还有有别的解决办法没有。
作者: j816326    时间: 2013-7-3 12:45
这个真有 用^可以实现交换的目的
a = a^b;
b = a^b;  
a = a^b;  



作者: 小石头39910    时间: 2013-7-3 13:15
方法有点笨,但是我想原理应该都懂
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);

作者: 蚂蚁搬家    时间: 2013-7-3 14:18
swap方法中的a、b、t都是局部变量,在swap方法调用完毕后,这三个变量的内存都被释放了,
main函数中的a、b的值实际上并未改变,他们仍指向原来的Integer对象,所以两次输出的结果是一样的
作者: oxf974025918    时间: 2013-7-3 14:30
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课中提到了
作者: xuluheng718    时间: 2013-7-3 14:30
好吧,楼主,你是全局变量和局部变量搞混了。。。。
我来帮你分析分析:



作者: denghui1010    时间: 2013-7-3 14:58
  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.        
复制代码

作者: 万琪    时间: 2013-7-3 15:06
鉴于10分以下,我们会酌情加分
10分以上的朋友,请提一些有水平的问题,不然不加分
少年们,努力吧:handshake





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