方法参数的传递机制
程序员文章站
2023-12-26 10:38:33
...
方法参数的传递机制如下:
参数是基本数据类型时: 形参的改变不会引起实参的改变
参数时引用数据类型时: 形参的改变会引起实参的改变
这个机制一直时烂熟于心的,只不过不知其所以然,,今天在翻阅疯狂讲义的时候找到了答案。
★ ★ ★:
Java里方法的参数传递只有一种方式:值传递 。所谓值传递就是将实参数值的复制传入方法内,而参数本身不会受到影响。
当参数时基本数据类型时:举个例子,,
package hello;
public class Self {
public static void main(String[] args){
int a=10;
int b=20;
swap(a,b);
//swap方法里a,b的值分别为:20,10
System.out.println("a,b调用swap方法后的值为:"+a+","+b);
//a,b调用swap方法后的值为:10,20
}
public static void swap(int a,int b) {
int temp=a;
a=b;
b=temp;
System.out.println("swap方法里a,b的值分别为:"+a+","+b);
}
}
可以见到a,b原来的值时10和20;
swap()方法里a,b的值变成了20和10;
但是swap()结束后a,b的值仍是10和20;
当参数类型为引用类型时:同样先举个例子
class Date{
int a;
int b;
}
public class Try {
public static void main(String[] args){
Date date=new Date();
date.a=10;
date.b=20;
swap(date);
System.out.println("a,b调用swap方法后的值为:"+date.a+","+date.b);
//a,b调用swap方法后的值为:20,10
}
public static void swap(Date d) {
int temp=d.a;
d.a=d.b;
d.b=temp;
System.out.println("a,b在swap方法里的值为:"+d.a+","+d.b);
//a,b在swap方法里的值为:20,10
}
}
可以看到,随着形参的变化,实参的a,b也被改变了。这里有人或许会问,不是说值传递吗,为什么我复制过去的值也会影响我本身呢?其实这里很简单,这上面的date变量只是一个引用变量,它指向我们a,b所在的对象。而我们复制的时候仅仅只是复制了date这个引用变量,并未复制它所指向的对象。而我们复制过来的date副本和date时指向同一个对象的,所以我们在对a,b进行交换的时候改变的是对象里的值,当我们交换结束后,date这个引用变量所指向的对象的a,b值也就被改变了。