欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

方法参数的传递机制

程序员文章站 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值也就被改变了。

上一篇:

下一篇: