方法的参数传递
一.方法的参数传递:
<1>参数分为哪几种?
1.实参;2.形参;
<2>什么是实参,什么是形参?
假设现在你有一支钢笔,钢笔的外壳就是形参,是不变的。而墨水则是实参,是需要用的。
<3>实参具体位置在哪里?形参位置具体在哪里?
下面看一段代码:
1. public class test1{
2.
3. public static void main(String[] args){
4.
5. Test t1 = new Test();
6.
7. //s1 和 s2 是实参
8. int s1 = 1;
9. int s2 = 2;
10.
11. System.out.println("s1:" + s1 + ", s2" + s2);
12.
13. //调用swap()方法时,传入实参的值
14. t1.swap(s1,s2);
15.
16. System.out.println("s1:" + s1 + ", s2" + s2);
17.
18. /*swap(int s1,int s2) s1 和 s2 是形参
19. *形参的命名是任意,也可以和实参一样。
20. */
21. public void swap(int s1,int s2){
22.
23. int temp = i;
24. i = j;
25. j = temp;
26.
27. }
输出结果为:
s1:1, s2:2
s1:2, s2:1
总结:
1.形参:方法声明时,方法小括号内是形参。
2.实参:调用方法时实际传入参数的值。
二.规则:java中的参数传递机制:值传递机制
<1>形参是基本数据类型:将实参的值传递给形参的基本数据类型的变量
<2>形参是引用数据类型:将实参的引用类型变量的值(对应的堆空间的对象的首地址值)传递给形参的引用类型变量。
第一个形参是基本数据类型时,实参的数值传递传递给形参,上面的代码是一个案例了。
现在来说说第二个,当形参为引用数据类型的情况。
先举个栗子,便于读者理解:
小明和小华现在有同时共有一辆玩具车,可以把玩具车理解为对象首地址值,共有可以理解为一个指针,小明和小华同时指向玩具车,而小明不喜欢玩具车轮子的型号,背着小华偷偷的把轮子型号换了。
这时小华不知道车轮被小明换了。轮子是玩具车的一部分,对象首地址值就是玩具车,轮子就是首地址值指向的数值,现在数值被改变了。
先看这段代码:
1.public class test2{
2.
3. //创建一个swap()方法,形参为DateSwap类型的 ds
4. public void swap(DateSwap ds){
5.
6. int temp = ds.i;
7. ds.i = ds.j;
8. ds.j = ds.temp;
9.
10.
11. }
12.
13. //创建一个静态类
14. static void DateSwap{
15.
16. int i = 1;
17. int j = 2;
18.
19. }
20.
21. //主方法main()
22. public static void main(String[] args){
23.
24. //创建对象t1
25. Test1 t1 = new Test1();
26.
27. DateSwap ds = new DateSwap();
28.
29. //调用swap()方法
30. t1.swap(ds);
31.
32. System.out.println("ds.i" + ds.i + "ds.j" + ds.j);
33.
34.
35. }
36.
37.}
在栈区中开辟了两个方法,分别把main()看成小明,swap()看成小华,new出来的对象的首地址值看成玩具车,静态DateSwap类中初始化的 i 和 j 是轮子,现在把轮子型号做了个交换。
注意:
引用数据类型的值其中只要一改变,原值就会跟着改变,而基本数据类型是其中一个改变,原值不改变。
就像你去复印一份资料,复印件你怎么画都行,原件内容始终是不变的,而引用数据类型是,你拿去复印时,不小心被帮你复印的人弄了几笔上去,原件内容也就改变了。
s1 和 s2 是基本数据类型,s1 和 s2 被交换后,原来的s1 和 s2 保持不变,可以拿第一个代码对比第二个代码看。
如果你喜欢这篇文字,可关注微信公众号:wu_you_lT,有深度好文等你阅读哦!