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
因此可以看出引用数据类型作为方法的参数时,是地址传递,对参数的操作能够直接影响他的真实的值。
3.结论
基本数据类型作为参数时,传递的仅仅是自己的一个副本,因此在方法中对参数的操作,不能影响原来的值。
引用数据类型作为参数时,传递的是自己的引用地址,因此在方法中对参数的操作,能够影响原来的值。
上一篇: jzoj 5835. Prime
下一篇: 图的遍历-深度优先和广度优先遍历