Java基础——方法的参数传递机制
来源:互联网 发布:js 跳转到锚点 编辑:程序博客网 时间:2024/05/01 13:23
在之前用C++的时候,参数传递有三种:传值,传地址值,传引用。Java中参数传递机制只有一种:值传递。值传递就是将实际参数值得副本传入方法内,而参数本身不会受到任何影响。
基本数据类型参数传递
举个栗子:
public class PrimitiveTransferTest { public static void swap(int a,int b){ //③ int tmp = a; a=b; b=tmp; System.out.println("swap方法里,a的值是"+a+";b的值是"+b); } public static void main(String[] args){ int a =6; //① int b = 9; //② swap(a,b); System.out.println("交换结束后,变量a的值是"+a+";变量b的值是"+b); }}运行结果:
在main方法中a赋值为6,b赋值为9,执行swap方法时,将实参a,b变量的值传给了swap方法的形参.从执行结果来看,交换结束后main方法中的执行结果还是a值为6,b值为9,swap方法的a,b只是main()方法中变量a,b的复制品。
在main()方法中给a,b变量赋值的时候(上边代码中的①②),会在栈区中为a,b分配两块内存.
在上述代码③处系统会为swap()方法的形参a,b分配两块内存。
因此,在swap()方法中执行交换时,是对自己的栈区变量进行的交换,不会影响main()栈区内的变量值。
引用类型参数传递
举个栗子:public class ReferenceTransferTest { public static void swap(DataWrap dw) //③ { int tmp = dw.a; dw.a = dw.b; dw.b= tmp; System.out.println("swap方法里,a成员变量的值是"+dw.a+";b成员变量的值是"+dw.b); //dw=null; //① } public static void main(String[] args){ DataWrap dw = new DataWrap(); //② dw.a=6; dw.b=9; swap(dw); System.out.println("交换结束后,a成员变量的值是"+dw.a+";b成员变量的值是"+dw.b); }}运行结果:
根据结果来看,swap成员变量的交换影响到了main()中的成员变量值,难道这是引用传递吗?千万不要被这个表象骗了哦.我们来做一个实验。假如他是引用传递,我们现在把上述代码①的位置解开注释。执行一下,发现交换结束后,成员变量和b成员变量还是能取到值。如果是引用传递,那当我们将dw的值设为null时,交换结束后成员变量a,b的值将不会被取到,而是会报异常。
再来分析一下上述代码的堆栈信息:
执行上述代码②的位置,main()创建了一个DataWrap对象。
执行上述代码③的位置,将实参dw的地址值传递给了形参dw,而不是dw的对象本身。到此,实参dw和形参dw都是指向堆内存中的同一块区域。所以才会出现swap()方法中的变量交换后影响了main()方法中的成员变量值。
执行上述代码①处,将dw置为null,其实是swap()方法中失去了对对象的引用。
总结
Java中的参数传递机制只有一种:值传递(包括值的传递和地址值的传递).- java基础——方法参数的值传递机制
- Java基础——方法的参数传递机制
- 方法的参数传递机制——值传递机制
- Java方法参数的传递机制,值传递?引用传递?
- java中方法的参数传递机制
- java中方法参数的传递机制
- Java方法的参数传递机制
- Java中方法的参数传递机制
- java中方法的参数传递机制
- java中方法的参数传递机制
- java中方法的参数传递机制
- java中方法的参数传递机制
- java中的方法参数的传递机制
- java方法的参数传递机制
- Java中方法的参数传递机制
- Java中方法的参数传递机制
- java中方法的参数传递机制
- Java SE 基础:方法的参数传递
- kaptcha验证码组件
- idempiere如果实现错误弹框提示
- 718. Maximum Length of Repeated Subarray
- hdoj no.2006
- RabbitMQ——Cenos7.5安装配置
- Java基础——方法的参数传递机制
- iOS经典讲解之svn常用的终端命令
- js确认删除提示
- 算法导论学习笔记(一)
- 第十周项目项目4
- Xml文档 标签提示功能
- Pycharm-python初始环境搭建常见问题(Mac版本)
- c# 自定义控件——已进度条为例
- MIT HAKMEM算法分析