方法的参数传递
1、值传递
a) 方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。传到方法里的参数类型是基本数据类型的都叫值传递
2、引用传递
a) 也称为传地址。方法调用时,实际参数的地址而不是参数的值被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。传到方法里的参数类型是引用数据类型的都叫引用传递
值传递例子:
1 public class test {
2
3 /**
4 * @param args
5 */
6 public static void main(String[] args) {
7 // TODO Auto-generated method stub
8 int a=5;
9 //未调用方法前输出
10 System.out.println("第一次输出:"+a);
11 swap(a);
12 //调用完方法后输出
13 System.out.println("第三次输出:"+a);
14 }
15 public static void swap(int a)
16 {
17 a=10;
18 //改变参数a的值后输出
19 System.out.println("第二次输出:"+a);
20 }
21 }
上面的例子输出结果为: 第一次输出:5
第二次输出:10
第三次输出:5
看,虽然在swap方法里改变了a的值,但是在main方法里的变量a的值仍然没有改变这就验证了上面的话,基本数据类型传递的话在方法里改变形参的值但是改变不了实际参数的值。。。
在这里我还要说明一个事,那就是String 字符串类型 不属于基本数据类型,但它也不是引用数据类型,它是特殊引用数据类型。例子如下:
1 public class test {
2
3 /**
4 * @param args
5 */
6 public static void main(String[] args) {
7 // TODO Auto-generated method stub
8 String a="您好!";
9 //未调用方法前输出
10 System.out.println("第一次输出:"+a);
11 swap(a);
12 //调用完方法后输出
13 System.out.println("第三次输出:"+a);
14 }
15 public static void swap(String b)
16 {
17 b="Hello,Word";
18 //改变参数a的值后输出
19 System.out.println("第二次输出:"+b);
20 }
21 }
结果为:第一次输出:您好!
第二次输出:Hello,Word
第三次输出:您好!
为什么改变不了?因为传字符串的话实际上就是值传递,所以改变不了..........
引用传递例子:
1 public class test {
2
3 /**
4 * @param args
5 */
6 public static void main(String[] args) {
7 // TODO Auto-generated method stub
8 int[] a={1,2,3};
9 System.out.print("未调用方法前输出的结果:");
10 for (int i = 0; i < a.length; i++) {
11 System.out.print(a[i]+" ");
12 }
13 System.out.print("\n");
14 swap(a);
15 System.out.print("调用完方法后输出的结果:");
16 for (int i = 0; i < a.length; i++) {
17 System.out.print(a[i]+" ");
18 }
19 }
20 public static void swap(int[] b)
21 {
22 b[0]=2;
23 System.out.print("改变参数b的值后输出的结果:");
24 for (int i = 0; i < b.length; i++) {
25 System.out.print(b[i]+" ");
26 }
27 System.out.print("\n");
28 }
29 }