为什么我的java交换功能不起作用?

时间:2015-09-27 05:27:19

标签: java swap

我试图在java中创建一个交换函数,但为什么这不起作用?

void swap(int a, int b) {
   int temp = a;
   a = b;
   b = temp;
}

3 个答案:

答案 0 :(得分:8)

因为java是pass by value而不是通过引用传递。您的互换方法不会更改实际的ab。您实际上已经交换了ab,它们仅在方法内部生效。您只需在a方法中打印bswap即可查看。

您可以在数组的帮助下返回交换的值。 (首先由sᴜʀᴇsʜ ᴀᴛᴛᴀ添加)

public class Test {

    static int[] swap(int a, int b) {
       return new int[]{b,a};
    }

    public static void main(String[] args) {
        int a = 10,b = 5;
        int[] ba = swap(a,b);
        a = ba[0];
        b = ba[1];
        System.out.println(a);
        System.out.println(b);
    }

}

答案 1 :(得分:2)

您的swap只会将值的副本转换为ab,因此您只需交换ab变量中的值在swap的范围内。

答案 2 :(得分:1)

public class HelloWorld {
    private int a, b;
    HelloWorld(){
        this.a=0;
        this.b=0;
    }
    HelloWorld(int a, int b){
        this.a=a;
        this.b=b;
    }
    void swap() {
       int temp = this.a;
       this.a = this.b;
       this.b = temp;
    }
    public static void main(String[] args) {
        HelloWorld obj = new HelloWorld(10,5);
        obj.swap();
        System.out.println("a="+obj.a);
        System.out.println("b="+obj.b);
    }

}

如果使用局部变量,则范围将在swap()方法中。但是如果你将它用作实例变量,这个例子会有所帮助 实例变量的范围可以在全班中使用 您可以查看范围 的 http://www.tutorialspoint.com/java/java_variable_types.htm
如果你想使用局部变量,那么 TAsk 给出的答案会更有帮助。根据您的要求。