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

我们知道,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所在的物理内存,其值当然会变化。

原文地址:https://www.cnblogs.com/g177w/p/8372045.html