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

来源:互联网 发布:linux不记历史命令 编辑:程序博客网 时间:2024/06/08 04:36

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: 20output in temp method: 10output in main method: 10output 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代表的形参,此图仅仅是为了说明传递规则,切勿做更多的解读。)







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

3.结论

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

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