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

java中的参数传递(值传递等)

程序员文章站 2024-02-11 13:23:46
...

java中参数的传递规则,经常会让初学者一头雾水,这里分析一下java中的两种基本传递方式。

不想看过程的,可以直接看文章末尾结论。

(在看参数传递规则之前,一定要保证自己已经充分理解了形参和实参的概念,否则在下边的学习,可能会更加懵圈。)

1.基本数据类型的传递规则。

首先看一段代码:

public class CompareTwo {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		temp(a,b);
		System.out.println("output in main method: "+a);
		System.out.println("output in main method: "+b);
	}

	public static void temp(int a,int b){
		int temp = a;
		a = b;
		b = temp;
		
		System.out.println("output in temp method: "+a);
		System.out.println("output in temp method: "+b);
	}
}

运行结果:

output in temp method: 20
output in temp method: 10
output in main method: 10
output in main method: 20

从上边代码和运行结果可以看出,在方法中参数a和b发生了交换,但是事实上,这两个变量都没有发生变化。这是为什么呢?

这里就需要知道基本数据类型作为参数时候的传递规则了。当基本数据类型作为参数的时候,其实只是传递过去了自己的值的副本,也就是说,无论你在方法中如何操作,操作的都是他本身值的副本,所以不管你是如何操作的,最终都不会影响到基本数据类型他的真身。

这里可能就会有人问,那怎样才能操作他的真身呢?其实很简单,本篇文章讲的只是说,基本数据类型作为方法的参数的时候传递的副本,所以要想直接操作他的真身,那就是直接操作这个基本数据类型,而不是将其作为方法的参数,在方法内部改变他。让基本数据类型作为方法的参数,然后在方法中操作这个参数,不可能对真身产生任何影响。

2.引用数据类型的传递规则

首先看一段代码

public class Compare {
	public static void main(String[] args) {
		int[] b={2,5,6};
		temp(b);
		System.out.println(b[0]);
	}

	public static void temp(int[] a){
		a[0] = 100;
	}
}



运行结果:

100



可以看出来,引用数据类型作为参数时,能够操作其真实的自己。原理如图:(这里的a代表的是实参,b代表的形参,此图仅仅是为了说明传递规则,切勿做更多的解读。)

java中的参数传递(值传递等)java中的参数传递(值传递等)






因此可以看出引用数据类型作为方法的参数时,是地址传递,对参数的操作能够直接影响他的真实的值。

3.结论

基本数据类型作为参数时,传递的仅仅是自己的一个副本,因此在方法中对参数的操作,不能影响原来的值。

引用数据类型作为参数时,传递的是自己的引用地址,因此在方法中对参数的操作,能够影响原来的值。