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