Java_方法的传参机制

Java中的方法参数的传递,分为值传递引用传递但是,实际上Java中只有值传递。而引用传递可以理解为传的是指针(c语言中)。值传递就是把变量的值传递过去,引用传递则是把数据的地址(即变量在内存空间的地址)传递过去。

目录

1.值传递

2.引用传递

一.值传递

当方法内传递的是基本数据类型时采用值传递,在这种传递方式下,传递的是值的拷贝,形参的改变并不会影响实参(即方法内外互不相干)。

再此之前需要了解一下Java内部的内存布局:

基本数据类型:

 数值型:

整型:byte,short,int,long

浮点型:float,double。

字符型: char

布尔型: boolean

接下来看代码

public class swap_9 {
    public static void main(String[] args){

        AB sp=new AB();
        int a=10,b=20;
        sp.swap(a,b);
        System.out.println("出方法后a和b的值"+a+" "+b);
    }
}
class AB{
    public void swap(int a,int b){
        int tmp=a;
        a=b;
        b=tmp;
        System.out.println("在方法内交换后的a和b的值"+a+" "+b);
    }
}

 这段代码执行后的结果是

可以看到,在swap方法内对形参a和b进行交换,出方法后实参a和b并没有发生改变,它jvm中的执行过程如下,当执行到方法后进入swap栈桢,在swap栈内,swap栈内的a,b,进行交换,输出20,10,之后swap方法执行完,sawp栈会销毁,继续执行main栈内的代码,而此时的a,b是main栈内的,所以,a,b并不发生改变,仍旧是10,20。

二.引用传递

引用传递主要发生在引用数据类型中,在方法调用时,传递的是引用的地址(变量在内存空间内的地址),传递的是拷贝(副本),所以此时,变量和他的拷贝(副本都指向同一个空间地址),形参的改变将影响实参。

下面以数组为列:

public class swap_9 {
    public static void main(String[] args){

        AB sp=new AB();
        int[] a={1,2,3};
        sp.swap(a);
        System.out.println("出方法后a[0]="+a[0]);
    }
}
class AB{
    public void swap(int[] a){
        a[0]=500;
        System.out.println("在方法内改变a[0]的值后a[0]="+a[0]);
    }
}

可以看到,在方法内改变了a[0]的值,外部a[0]的值也发生了改变。它在内存中的执行过程如下

在swap栈内的a数组是main栈内a数组的副本(拷贝),二者指向同一地址所以这两个a数组任一方的改变,都影响着彼此,即形参的改变影响着实参。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.君莫笑.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值