java中关于方法参数的介绍
要了解Java中参数传递的原理,首先你要先知道按值传递和按引用传递的区别。
按值传递表示方法接受的是调用者提供的值,按引用传递表示方法接受的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。而Java程序设计语言总是采用按值调用,也就是说,方法得到的是所有参数值的一个拷贝。下面我将举一些实例来具体说明:
#基本数据类型
public static void main(String[] args) { // TODO Auto-generated method stub int a=10,b=20; swap(a,b); System.out.println(a+'-------'+b); } public static void swap(int a,int b) { int temp=a; a=b; b=temp; }
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
其结果为
原理相当于:
执行swap之前:
执行swap之后:
从图中可以看出:执行swap前后,实参ab并没有改变。改变的只是形参ab,而形参ab在执行完swap之后就被撤销了(局部变量在方法执行结束后被撤销)。所以最后a=10,b=20;
#类类型
类类型直接传递
public class scdn { public static void main(String[] args) { // TODO Auto-generated method stub employee tom=new employee(); tom.setId(10); employee jarry=new employee(); jarry.setId(20); System.out.println(tom.getId()+'-------'+jarry.getId()); } public static void swap(employee a,employee b) { employee temp=a; a=b; b=temp; } } class employee{ private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } }123456789101112131415161718192021222324252627282930123456789101112131415161718192021222324252627282930
结果为
其原理和上面差不多。
类类型通过方法传递
public class scdn { public static void main(String[] args) { // TODO Auto-generated method stub employee tom=new employee(); tom.setId(10); employee jarry=new employee(); jarry.setId(20); swap(tom, jarry); System.out.println(tom.getId()+'-------'+jarry.getId()); } public static void swap(employee a,employee b) { int temp; temp=a.getId(); a.setId(b.getId()); b.setId(temp); } } class employee{ private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
结果为:
执行swap之前:
执行swap之后:
为什么类类型通过这两个不同swap方法之后结果会不同呢?这是因为第二个swap中实参tom和形参a一直指向的是同一个地址(x),jarry和b一直指向(y),所以最后修改形参可以改变实参的值。
赞 (0)