Java中的参数传递机制

学习 java 的时候最开始觉得这个参数传递应该很简单啊,就像C#一样,传参数就行了,但其实它有着底层不一样的东西,先来看代码和结果

public class Main {
    public static void main(String[] args){
   		Main m=new Main();
        int a=10;
        int b=5;
        m.swap(a,b);
        System.out.println("a"+a +"    b"+b);
    }
    public void swap(int m,int n){
        int temp =m;
        m=n;
        n=temp;
        System.out.println("m"+m+"    n"+n);
    }
}

swap 里面是一个非常简单的数据交换的一个抽象的方法
那在 main 里调用这个方法后,a 和 b 的值就交换了,但是结果不是我想象的那个样子~
a 和 b 的值没交换,但是 m 和 n 的值交换了
在这里插入图片描述

没有数据交换的代码图示

在调用swap方法前内存中的情况如下图所示
在这里插入图片描述
栈中的 m 存的是new Main() 的地址 0x 3344

    int a=10;
    int b=5;

也在栈中有了具体的内容
那接下来看调用swap方法
在这里插入图片描述
调用的 swap 方法里面是相当于在栈中添加了 m 和 n ,将 a 和 b 的值赋过去了,所以在进行交换的时候也就是 m 和 n 进行了交换,当swap执行完毕的时候栈中的关于 swap 这个方法的内容就会被清除

在这里插入图片描述
所以这个时候 a 和 b 的值是没有改变的,也就没有起到交换的作用

那改如何进行交换呢

可以进行数据交换的代码图示

public class Main {
    public static void main(String[] args){
        Main m=new Main();
        DataSwap ds=new DataSwap();
        m.swap(ds);
        System.out.println("ds.i:"+ds.i +"    ds.j"+ds.j);
    }
    public void swap(DataSwap d){
        int temp =d.i;
        d.i=d.j;
        d.j=temp;
    }
}

class DataSwap{
    int i=10;
    int j=5;
}

结果
在这里插入图片描述
在调用 swap 方法前是这个样子的
在这里插入图片描述
调用 swap 方法
先在栈中添加了 d 再将 ds 的值赋值给 d 这个时候可以发现 ds 中存放的是 dataswap 的地址 ,那这个时候 d 中存放的也就变成了地址,那也就同样的指向了 dataswap
在这里插入图片描述
这样 经过 swap 的交换后就交换的是 dataswap 里面的具体数据了,也就真正实现了数据交换.
在这里插入图片描述

后记

嗯,看来以后如果遇到问题还得通过画图来好好分析一番,我大概是理解了它的内容,你理解了吗?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值