练习代码时,写了一个方法来交换两个表力量的值,发现了一个问题;
代码是这样的:
public class textOne {
void transport(int t1,int t2) {
int t;
t=t1;
t1=t2;
t2=t;
System.out.println("方法中t1的值:"+t1);
System.out.println("方法中t2的值:"+t2);
}
public static void main(String arg[]) {
int t1=3;
int t2=7;
textOne p1=new textOne();
p1.transport(t1, t2);
System.out.println("main中t1的值:"+t1);
System.out.println("main中t2的值:"+t2);
}
}
输出
方法中t1的值:7
方法中t2的值:3
main中t1的值:3
main中t2的值:7
为什么方法不能交换main中t1,t2的值;
要怎样用方法交换main中t1,t2的值?
求教各位。

解决方案 »

  1.   

    你可以多去了解下作用域相关知识.
    你的t1和t2 只是方法内部的局部变量, 
    你这样做相当于把传进来的参数做了交换, 跟类中的属性没有关系
    如果真的想替换的话
    可以试试这么做
    void transport(int t1,int t2) {
     int t;
     t=t1;
     this.t1=t2;
     this.t2=t;
     System.out.println("方法中t1的值:"+t1);
     System.out.println("方法中t2的值:"+t2);
     }
    this指定你要交换的变量, 是当前类的变量,而不是方法中的变量
      

  2.   

    public static void main(String[] args){  
        AtomicInteger a = 1, b = 2;
        swap(a,b);
        System.out.print("a="+ a + ", b="+ b);
    }
    void swap(Integer a, Integer b){  
        int temp = a.get();
        a.set(b.get());
        b.set(temp);
    }
      

  3.   

    https://blog.csdn.net/whuxinxie/article/details/54895768
      

  4.   

    既然没能交换main中的值,显然传递的是变量的值嘛。c里用指针,java嘛我也是刚学没几天,不过传递引用是肯定行的,或者用返回值嘛,总之办法一大堆,这属于基础的基础啊,楼主应该多看下基础。