正如我在网上读到的那样,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 = 10
和y = 20
的原始值仍然存储在某个位置并且显示的交换值不正确?请指教。感谢
答案 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)