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

时间:2017-09-11 14:53:12

标签: java

正如我在网上读到的那样,Java是按值传递的,并且通用交换函数不会交换这两个值。我还读到,交换原始类型的值是不可能的。我想知道为什么以下程序工作并在交换后显示不同的值?

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 = 10y = 20的原始值仍然存储在某个位置并且显示的交换值不正确?请指教。感谢

1 个答案:

答案 0 :(得分:3)

完全确定您获取该信息的位置,但我们一次只能使用此信息。

  

正如我在网上读到的那样,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)