Java中方法参数的传递
来源:互联网 发布:剑三帅气成女捏脸数据 编辑:程序博客网 时间:2024/05/17 23:22
java中方法参数传递看似有两种,值传递和引用传递。而实际上都是值传递。
所谓值传递,传递的是变量的副本就是说,在将变量a作为参数传进方法中时,方法中接收到的是a的副本,在方法中对参数的修改实际上修改的是a的副本,所以不会影响到a的值。
而引用传递,传递的是变量的内存地址。在将变量a作为参数传递给方法时,传递的是a的内存地址,在方法中对参数的修改,实际上是修改的a本身。
因为java的变量有两类,一类是基本数据类型,一类是引用类型。所以就把基本数据类型作为参数进行传递时,当做了“值传递“;把引用类型作为参数进行传递时,当做了“引用传递“。 事实上无论是传递基本数据类型还是引用类型,java中都是按“值传递”进行操作的。
在引用变量r作为 参数传到方法中时,传递的是r的副本。只不过r和r的副本都指向了同一个对象。
public class TestParamPassing {public static void main(String[] args) {int b = 4;testValueParam(b);System.out.println("======== b : " + b);List<String> list = new ArrayList<String>();list.add("a");list.add("b");testReferenceParam(list);System.out.println("======== list : " + list);}public static void testReferenceParam(List<String> list){list.add("c");list = new ArrayList<>();list.add("d");System.out.println("-------- list : " + list);}public static void testValueParam(int a){System.out.println("======== a: " + a);a=3;System.out.println("======== a after : " + a);}}
执行结果为:
======== a: 4======== a after : 3======== b : 4-------- list : [d]======== list : [a, b, c]
在方法testValueParam(int a)中,因为是“值传递”,所以传到方法中的是原始值的副本,所以在方法中对a的修改,不会影响到原始值。
在方法testReferenceParam(List<String> list)中,因为是“值传递”,所以传到方法中的是原始值的副本,所以两者都指向了同一个对象,因此在方法中对对象的修改,会影响到原始值指向的对象。但是,当在方法中,将副本指向了其他的对象,再对副本指向的对象进行修改,就不会影响到原始值所指向的对象了。所以在传递引用变量时,也是“值传递”。
0 0
- java中方法的参数传递机制
- java中方法参数的传递机制
- JAVA中方法参数的引用传递
- JAVA中方法参数的引用传递
- Java中方法参数的传递
- Java中方法的参数传递机制
- java中方法的参数传递机制
- java中方法的参数传递机制
- java中方法的参数传递机制
- java中方法的参数传递机制
- JAVA中方法的参数传递
- Java中方法的参数传递机制
- Java中方法的参数传递机制
- java中方法的参数传递机制
- java方法中参数的传递机制(值传递)
- Java 方法中参数传递
- 方法中参数的传递
- java 方法的参数传递
- [CSU 1803 2016]数学
- 参加ThoughtWorks实训——学习经验技巧的小分享(二)
- 配置java环境
- EventBus3
- [LeetCode] 128. Longest Consecutive Sequence
- Java中方法参数的传递
- 初窥 CATransform3D 文档解读
- 射线Physics.Raycast
- mac下安装webpack
- 初窥 CGAffineTransform 文档解读
- jquery.js文件报错missing semicolon
- iOS下的 Fixed + Input 调用键盘的时候fixed无效问题解决方案
- Android之Fragment实现界面切换学习笔记
- 版本控制工具SVN的安装