java关于方法参数传递的相关问题讨论

时间:2021-10-31 16:47:10

我们知道,java中定义变量的目的有两个:

1.防止被垃圾回收机制回收,毕竟如果没有明确指向真实物理内存的'代号'很大可能会被java垃圾回收机制当作垃圾回收。

2.便于引用,方便处理。

 1 package testp1;
2
3 public class Test01 {
4 public static void replace1(int a){
5 a = 10;
6 }
7 public static int replace2(int a){
8 a = 10;
9 return a;
10 }
11 public static void replace3(String s){
12 s = "a";
13 }
14 public static String replace4(String s){
15 s = "a";
16 return s;
17 }
18
19 public static void main(String[] args) {
20 int a = 0;
21 replace1(a);
22 System.out.println("in replace1:a="+a);
23 a = replace2(a);
24 System.out.println("in replace2:a="+a);
25 String s = "make";
26 replace3(s);
27 System.out.println("in replace3:s="+s);
28 s=replace4(s);
29 System.out.println("in replace4:s="+s);
30 }
31 }

局部变量和外部变量

在上述代码的replace1中,形参a为基本数据类型,它指向的是数字10所在的物理内存,调用该方法后并没有改变外部变量a所指向的物理地址。就会出现输出没改变变量值的结果,但是如果调用了int返回类型的方法replace2后我们发现它的值改变了,是因为我们把内部变量指向的物理地址赋值给了外部变量a,在返回值为void的引用数据类型的方法replace3中,方法的结果就是该形式参数所引用的对象a,同样只在该方法内部起作用,出了该方法,变量还是原来的引用对象,在返回类型为String的类型中,我们又让外部变量指向对象a所在的物理内存,其值当然会变化。