通过程序了解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
仍在某处存储和显示的交换值不正确?请指教。谢谢
不是完全确定你在哪里得到这些信息,但让我们一次采取这一个。
正如我在网上阅读的那样,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)
您在技术上不能在基元之间“交换”值:“4”将保留“4”你用它做。 OP只是混淆了交换和分配。 –
@ M.Prokhorov:它不像Python中那样不需要中间变量的交换方式,但是当在这种情况下使用时,重新分配是一致的。 – Makoto
我很确定Python也使用第三个变量,它只是不会显示给你。 –
(捂脸!)你们这些值传递到任何方法,以检查***交换功能将不会掉***理论??? –
在执行'int temp = x;'之后,存储在'temp'中的'x'的值。等等。他们不是“某个地方”,你自己告诉编译器他们应该在哪里。 –
您需要理解字面**交换**和交换变量之间的+赋值的区别。另外 - “*因为我在网上读到Java是通过值传递的*”您从未将任何变量传递给示例中的任何方法 – Fureeish