推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

满满干货!详解Java中的方法参数传递机制

   2023-08-19 网络整理佚名1460
核心提示:Java中的方法如果在声明时包含了形参声明,调用方法时就需要将给这些形参指定参数值,这些传递给形参的参数值也称为实参。其实Java里方法参数的传递方式就是值传递。下面通过一个例子演示方法参数传递的效果。其实方法的参数传递确实都是值的传递,只不过基本类型作为实参时,传递的是实参值的副本,而引用类型作为方法的参数时,传递的是实参的引用。

了解过Java中方法的读者都知道,Java中的方法必须使用类或对象来调用,然后才能执行。 如果问Java中方法的参数传递机制,很多朋友都会回答:包括引用传递和值传递。 但如果需要分辨它们之间的区别,有的朋友说有点傻,分不清,所以这篇文章就来一一揭秘!

如果Java中的方法在声明时包含形参声明,那么在调用该方法时就需要为这些形参指定参数值。 这些传递给形式参数的参数值也称为实际参数。 事实上,Java中传递方法参数的方式就是值传递。

下面的例子演示了方法参数传递的效果。

public class Test01 {    public static void main(String[] args) {        int a=66;        int b=88;        swap(66,88);        System.out.println("main方法中,a="+a+",b="+b);    }    public static  void swap(int a ,int b){        int tmp=a;        a=b;        b=tmp;        System.out.println("swap方法中,a="+a+",b="+b);    }}

(左右滑动查看完整代码)

你认为运行上述代码的结果是什么? 相信大部分小伙伴都能说出下面的运行结果。

交换法中,a=88,b=66

main方法中a=66,b=88

从上面的运行结果可以得出结论,当调用该方法时,会将实参值的副本传递给相应的形参。 此时,形参接收到的实际上只是实参值的副本。

Test1的运行流程如下图1-2所示。

图1 main()方法中的实际参数传递给swap()方法

图2 swap()方法中a和b值的交换

整个运行过程中,main方法的栈区中变量a和b的值没有发生变化。 当调用方法swap()时,将主方法栈区中的变量a和变量b的值分别赋值给交换栈区中的变量a和b,然后将变量a和变量的值赋值给交换栈区中的变量a和b。 swap方法中的变量b被交换。

前面我们看到的是基本类型的参数传递。 接下来我们将演示引用类型的参数传递。

class Data{    public   int a;    public  int b;}portant;overflow-wrap: break-word !important;">
public class Test02 { public static void main(String[] args) { Data dt = new Data(); dt.a=66; dt.b=88; swap(dt); System.out.println("main方法中,dt.a="+dt.a+",dt.b="+dt.b); } public static void swap(Data dt){ int tmp=dt.a; dt.a=dt.b; dt.b=tmp; System.out.println("swap方法中,dt.a="+dt.a+",dt.b="+dt.b); }}

(左右滑动查看完整代码)

对于上面的案例,相信小伙伴的运行结果有很多答案,真实的运行结果如下。

swap方法中,dt.a=88,dt.b=66

main方法中,dt.a=88,dt.b=66

有的朋友会说,那不是说方法的参数传递都是值传递吗? 为什么基本类型的参数传递结果与引用类型的参数传递结果不同?

事实上,方法的参数传递确实是值的传递,但是当基本类型作为实参时,传递的是实参值的副本,而当引用类型作为方法时参数,传递的是对实际参数的引用。 操作流程如图所示。

工作流程

main方法创建一个Data对象,并通过变量dt引用Data对象,变量dt存储了Data对象的引用(地址值); 然后在main方法中调用swap()方法,将dt的值(即Data对象的地址值)赋值给swap()方法的变量dt。 此时swap()方法中的dt还保存了Data对象的地址值。 此时,无论是在main方法中修改变量dt,还是在swap()方法中修改dt,都会修改Data对象的属性。

一般来说,无论传递基本类型还是引用类型,Java中的方法参数传递方式都是值传递,只不过基本类型传递的是实际参数值的副本,而引用类型传递的是对象的地址值。

8月份资源更新

回复【0】获取2021年暑期教师培训信息

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON