你传进去的只是一个副本,public class StringTest{
    public static int[] change(Integer a,Integer b){
        int[] i = new int[1];
        Integer c = a;
        a = b;
        b = c;
        i[0]=a;
        i[1]=b;
       return i ;
    }
    public static void main(String args[]){
        Integer a = 20;
        Integer b = 40;
         
       int[] temp = change(a,b);
        System.out.println(temp[0]);
        System.out.println(temp[1]);
    }
}

解决方案 »

  1.   

    因为调用方法传进去的只是 “值” ,每个方法中的局部变量都是不同的,即便他们可以有相同的名字,所以你修改一个方法内的局部变量不会影响到其他方法中的局部变量。所以封装一个方法交换当前方法内两个局部变量的值 == 无解,这是Java的固有特性
    当然你要说绝对做不到也不是,利用JNI本地库调用其他语言比如C,可以做到,但为了一个这种功能简直是因小失大得不偿失。
      

  2.   


    public static void main(String args[]){
            Integer a = 20;
            Integer b = 40;
            
            // 传递拷贝进去,方法内是将拷贝的值改变了
            // 但不影响原来的参数a 和 b
            // change(a,b); 
            Integer c = a;
            a = b;
            b = c;
            
            System.out.println(a);
            System.out.println(b);
        }
      

  3.   

    方法change(Integer a,Integer b)中的 a、b是局部变量 啊
      

  4.   

     
              |-------|
    a----->|  20  |<------a'
              |-------|          |-------|
    b----->|  40  |<------b'
              |-------|调用change(a,b)时,传递进去的是main函数中a,b的副本a',b'
    change(a,b)执行到返回处时,a',b'的指向是变了,但不影响
    main函数中的a,b的指向      |-------|
    a------>|  20  |<------b'
               |-------|
              |-------|
    b----->|  40  |<------a'
              |-------|
    change(a,b)执行返回后,a'和b'就不存在了
      

  5.   

    替换完成后,要将替换后的值返回过去。只在chang中进行了替换,对main没有影响啊!
      

  6.   

    这个你也封装
    直接按照4#的方法多省事楼主多了解下java中的变量类型及作用域
      

  7.   

    在change方法中暂时交换了a和b的拷贝,但是方法结束之后,方法中的拷贝就消失了 原来的还是原来的
      

  8.   

    返回的应该是40
    你把所有Integer定义的数据都改为int试试
      

  9.   

    明确告诉楼主,java 做不到这个,并且这种功能也没什么现实意义
      

  10.   

    数组  对象  map  都行
      

  11.   


    public class test{
    static   Integer a = 20;
        static   Integer b = 40;
        
        public static void change(Integer a,Integer b,test t){
            Integer c = a;
            t.a = b;
            t.b = c;
        }
        
        public static void main(String args[]){
         
            test t=new test();
            change(a,b,t);
            System.out.println(a);
            System.out.println(b);
        }
    }楼主?这个是不是你想要的?
    主要是这样的,你传进来的其实是复制品,在方法内部进行操作之后就完事了。方法执行后,原来的都没有改变,你没发现,你操作来操作去,都是传进来的参数吗?而原来的却没有动。