参数有哪几类?
形式参数
用来接收调用该方法时传递的参数。
只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间。
因此仅仅在方法内有效。
举例:
public void test(int a,int b){
int c=a;
a=b;
b=c;
system.out.println("a:"+a+"b:"+b+"c:"+c)
}
其中int a int b 就是形参,一旦方法结束就会在栈空间中被销毁。
实际参数
传递给被调用方法的值,预先创建并赋予确定值。
举例:
test(1,2);
其中1,2就是实参。
传<值>调用
传值调用中传递的参数为基本数据类型。
将参数视为形参。
举例:
1 public class Test{
2 public static void main(String[] args) {
3 int i = 10;
4 int j = 5;
5 Test t = new Test();
6 System.out.println("i:" + i + " j:" + j);
7 t.test(i, j);
8 System.out.println("i:" + i + " j:" + j);
9
10
11 }
12
13 public void test(int a, int b) {
14 int c= a;
15 a = b;
16 b = c;
17 System.out.println("a:" + a + " b:" + b);
18 }
19
20
21 }
大家会很困惑,啥玩意?
之前不是刚说传递给被调用方法的参数是实参吗?
在第七行我们调用test方法时传递了i,j
并且在方法内进行了值交换,但最终结果却是初始化值。
-----------难点来了,也就是说----------
因为在方法运行结束时,自动销毁栈空间内的形参。
也就是说方法中的值改变只作用到了形参,而不影响传递的实参。
传<引用>调用
如果传递的参数是引用数据类型。
参数视为实参。
举例:
10 public class Test {
11 public static void main(String[] args) {
12 Test t = new Test();
13 Data data = new Data();
14 System.out.println("data.i:"+data.i+" data.j:"+data.j);
15 //调用
16 t.test(data);
17 System.out.println("data.i:"+data.i+" data.j:"+data.j);
18
19 }
20
21 public void test(Data data) {
22 int c= data.i;
23 data.i = data.j;
24 data.j = c;
25 }
26 }
27
28 class Data {
29 int i = 10;
30 int j = 5;
31 }
同上,如果传递的参数是引用数据类型,参数视为实参。在调用的过程中,将实参的地址传递给了形参,形参上的改变都发生在实参上。

被折叠的 条评论
为什么被折叠?



