编程语言中将参数传递给方法有两种方式值传递(call by value)和引用传递(call by reference)在Java语言中只存在值传递。
public class Test {
public static void main(String[] args){
int x=1;
change(x);
System.out.println(x);
}
public static void change(int a){
a=a+2;
}
}
上面程序的工作过程,调用方法change的时候x的值复制了一份给a
a的值加上了2,但是x的值依然是1
change方法结束之后a的值不再使用。
最后的结果输入1.
这是基本数据类型,下面看对象类型。
public class Test {
public static void main(String[] args){
Cat cat=new Cat();
cat.leg=1;
change(cat);
System.out.println(cat.leg);
}
public static void change(Cat a){
a.leg=2;
}
}
class Cat{
int leg;
String color;
}
上面程序的执行过程,调用change()方法的时候cat的引用复制一份,指向同一个对象Cat
change方法中a引用指向的leg值变为2
因为两个引用指向同一个对象,所以最后cat引用指向对象的leg值输出的是2.
public class Test {
public static void main(String[] args){
Cat a=new Cat(1,"tom");
Cat b=new Cat(2,"cat");
change(a,b);
System.out.println(a.leg);
System.out.println(b.leg);
}
public static void change(Cat a,Cat b){
Cat temp=a;
a=b;
b=temp;
}
}
class Cat{
int leg;
String color;
public Cat(int leg, String color) {
this.leg = leg;
this.color = color;
}
}
以上程序的工作过程,调用change方法的时候a和b的引用都进行了复制,
change方法里面的ab引用进行了交换,change方法结束之后里面的引用的结果并没有保存下来。
所以最后输出的结果为1,2.