通过程序了解java中的swap函数

问题描述:

正如我在线阅读的,Java是通过值传递的,一般的交换函数不会交换这两个值。我也读过,不可能交换原始类型的值。我想知道为什么下面的程序工作并在交换后显示不同的valies?通过程序了解java中的swap函数

public class swapMe { 

    public static void main(String[] args) { 
     int x = 10 , y = 20; 

     System.out.println("Before"); 
     System.out.println("First number = " + x); 
     System.out.println("Second number = " + y); 

     int temp = x; 
     x = y; 
     y = temp; 

     System.out.println("After"); 
     System.out.println("First number = " + x); 
     System.out.println("Second number = " + y); 
    } 
} 

是它喜欢的地方,的x = 10原始值和y = 20仍在某处存储和显示的交换值不正确?请指教。谢谢

+2

(捂脸!)你们这些值传递到任何方法,以检查***交换功能将不会掉***理论??? –

+0

在执行'int temp = x;'之后,存储在'temp'中的'x'的值。等等。他们不是“某个地方”,你自己告诉编译器他们应该在哪里。 –

+0

您需要理解字面**交换**和交换变量之间的+赋值的区别。另外 - “*因为我在网上读到Java是通过值传递的*”您从未将任何变量传递给示例中的任何方法 – Fureeish

不是完全确定你在哪里得到这些信息,但让我们一次采取这一个。

正如我在网上阅读的那样,Java是按值传递的,一般的交换函数不会交换这两个值。

正确 ...如果通过调用方法来实现交换的期望。

public void swap(int x, int y) { 
    int tmp = x; 
    x = y; 
    y = tmp; 
} 

// meanwhile, in main 
int x = 10; 
int y = 20; 
swap(x, y); 
System.out.println(x); // still prints 10 
System.out.println(y); // still prints 20 

不正确 ...如果交换发生内部的方法和以某种方式利用。

public void swap(int x, int y) { 
    int tmp = x; 
    x = y; 
    y = tmp; 
    System.out.println(x); // will print 20 from main 
    System.out.println(y); // will print 10 from main 
} 

// meanwhile, in main 
int x = 10; 
int y = 20; 
swap(x, y); 
System.out.println(x); // still prints 10 
System.out.println(y); // still prints 20 

我也看了,它是不可能的交换原始类型的值。

不,这是完全可以做到的。您始终可以重新分配变量。

至于你上面的例子为什么起作用,这是因为当你重新指定其中一个变量时,你正在保持其中一个值。当你复制它时,你基本上把一个价值放在一边。

慢慢...

int x = 10; 
int y = 20; 
int tmp = x; // tmp = 10 
x = y; // x = 20, tmp = 10 
y = tmp; x = 20, y = 10; tmp = 10 (but that doesn't matter) 
+0

您在技术上不能在基元之间“交换”值:“4”将保留“4”你用它做。 OP只是混淆了交换和分配。 –

+0

@ M.Prokhorov:它不像Python中那样不需要中间变量的交换方式,但是当在这种情况下使用时,重新分配是一致的。 – Makoto

+0

我很确定Python也使用第三个变量,它只是不会显示给你。 –