在程序设计中,会遇到需要交换两个基本类型变量值的需求。如果把交换数值的代码封装为一个方法,像下面这样,在main方法中仍然无法交换两个变量的值,这是因为Java在进行参数传递的时候是值传递。(关于值传递和引用传递,可以参看笔者的另一篇博客:Java中引用类型的参数也是值传递)
public class Demo {
public static void main(String[] args) {
int x = 5;
int y = 10;
swap(x, y);
System.out.println("x="+x+", y="+y);
}
public static void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
}
那么,怎样才能通过方法实现两个数数值的交换呢?根据Java中引用类型的参数也是值传递的文章内容可以知道,尽管Java是值传递,但是这个值仅仅是参数本身的值,如果参数是引用类型,这个值就代表了一个引用。所以,应该将要交换的值用引用类型表达出来。为此,封装了一个 Value 类型。
具体代码如下所示:
public class Demo {
public static void main(String[] args) {
int x = 5;
int y = 10;
Value value = new Value(x, y);
swap(value);
System.out.println("x="+value.x+", y="+value.y);
}
public static void swap(Value value) {
int temp = value.x;
value.x = value.y;
value.y = temp;
}
}
class Value {
int x;
int y;
public Value(int x, int y) {
this.x = x;
this.y = y;
}
}