博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java方法参数之参数传递方式
阅读量:3916 次
发布时间:2019-05-23

本文共 1027 字,大约阅读时间需要 3 分钟。

Java的参数传递总是按值调用

无内鬼,先来整个例子:

Employee a = new Employee("Alice");Employee b = new Employee("Bob");swap(a,b);public static void swap(Employee x,Employee y){    Employee temp = x;    x = y;    y = temp;}

        我们知道这里给函数 swap 传进来两个对象的引用,然后在内部将他们两个进行了交换。按理来说如果 Java 对对象采用的是按引用调用则,输出来应该是交换成功的。

        但是结果,并不是这样而是他们根本没有被交换,所以 Java 参数传递是按值掉用的。

我们来分析一下原因:

       一开始传入 swap 函数中时,a,b本来就已经指向了 Employee 类的实例了,而在 java 中并不是把两个引用原封不动的传到函数内,而是各拷贝了一份引用 x,y 也指向了 Employee 类的实例。

        在函数内进行交换时,只交换了 x,y 引用的指向,它们确实交换成功了。但是函数结束后变量销毁,我们输出的还是 a,b 的引用所指向的实例,a,b 本身并没有发生改变,所以在 Java 这里并没有发生交换,体现了并不是按引用传递的。

       我们看下面代码:

User u1 = new User();User u2 = new User();u1.name = "张三";u2.name = "李四";exchange2(u1, u2);System.out.println(u1.name);System.out.println(u2.name);public static void exchange2(User x,User y) {	String temp = x.name;	x.name = y.name;	y.name = temp;}

        我们仍把对象的引用 a,b 传进函数内,函数内仍会生成引用的拷贝 x,y,但是通过 x 直接调用到了实例的属性 name并对其进行了交换,当函数结束时虽然销毁了引用 x,y 但是实例的值已经发生了改变。

所以这下你应该弄懂了 Java 参数传递总是值传递了。

下面总结一下 Java 方法中参数的使用情况:

  • 一个方法不能修改一个基本数据类型的参数。
  • 一个方法可以改变一个对象参数的状态。
  • 一个方法不能让对象参数引用一个新的对象。

转载地址:http://zzprn.baihongyu.com/

你可能感兴趣的文章
译 | 将数据从Cosmos DB迁移到本地JSON文件
查看>>
再被补刀!Flash又遭抛弃,你会怀念它吗?
查看>>
国产操作系统发展离不开人才和市场
查看>>
心想技术驱动业务,却在背道而驰
查看>>
SM2 国密算法被 Linux 内核社区接受
查看>>
日计不足涓滴成河-自定义响应结果格式化器
查看>>
.NET架构小技巧(3)——反射,架构人员法宝I
查看>>
对精致码农大佬的 [理解 volatile 关键字] 文章结论的思考和寻找真相
查看>>
.NET for Apache Spark 1.0 版本发布
查看>>
吐槽一下Abp的用户和租户管理模块
查看>>
. NET5正式版本月来袭,为什么说gRPC大有可为?
查看>>
初识ABP vNext(12):模块的独立运行与托管
查看>>
新版本 Swashbuckle swagger 组件中的 "坑"
查看>>
.NET架构小技巧(5)——反射,架构人员法宝III
查看>>
C# 中的 in 参数和性能分析
查看>>
.NET架构小技巧(6)——什么是好的架构
查看>>
C#中形态各异的class
查看>>
.Net 5性能改进
查看>>
InfluxDB 2.0 之Flux语法篇
查看>>
TensorFlow 2学习和工业CV领域应用 心得分享
查看>>