Java参数传递:基本类型和引用类型作为传参的分析

java中的方法可以传递参数,参数传递的方法就是值传递。

参数又分为实参和形参。

实参:调用方法时,传递的参数叫实参。调用方法时,会把实参传递给形参,方法内部实际上使用形参。

形参:定义方法时,写的参数叫形参。

值传递:当参数是基本类型时,传递参数的值,传递i=5,会把5这个值赋值给形参。

​ 当参数是对象时,传递的是对象的地址值,就是把对象的地址值赋值给形参。

基本类型作为参数传递
public class Test01 {

    public void change( int a){
        System.out.println("方法中a 的初始值"+a);
        a= 20;
        System.out.println("方法中a 的新值"+a);
    }
    public static void main(String[] args) {
        int a = 10;
        Test01 t = new Test01();
        t.change(a);
        System.out.println("方法执行后的值"+a);
    }
}

在java中基本数据类型遵循值传递,所以在t 在调用change()方法时, 只是将原数据a的副本传给方法中的参

数,第一时间原本和副本a的值都是10, 在执行到a=20后,副本a的值变成了20。所以运行结果为:
在这里插入图片描述
方法的传参过程:

(1)main方法是程序的入口,先分配实参变量的内存空间并初始化。

(2)调用change()方法,为change()方法的形参变量分配内存空间。

(3)将实参变量的数值赋值给对应的形参变量。

(4)执行change()方法的方法体,执行完毕后释放形参变量的内存空间。

(5)main方法得到change()方法的返回值后并继续向下执行。

(6)当main方法执行完后,释放实参变量的内存空间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPlkVwUE-1588351687966)(C:\Users\YangJian\Desktop\微信图片_20200502002514.png)]

当使用基本数据类型作为方法的形参时,在方法体内对形参的改变不会影响到实参的值。

引用类型作为参数传递

引用类型,作为参数传递,属于引用传递,传递的是地址值,形参的改变会影响实参。

但String类例外,String字符串比较特殊,也属于引用传递,但是他作为参数传递,是值传递。

public class MyTest {
    public static void main(String[] args) {
        //引用类型,作为参数传递,属于引用传递,传递的是地址值,形参的改变会影响实参。(String例外,String属于值传递)
        //但是String字符串比较特殊,虽说String是引用类型。但是他作为参数传递,属于值传递。
        String str="abc";
        test(str);
        System.out.println(str); //2 abc
        System.out.println("================================");
        //引用类型,作为参数传递,属于引用传递,传递的是地址值,形参的改变会影响实参。
        StringBuffer sb = new StringBuffer("好好学习");
        test(sb);
        String string = sb.toString();
        System.out.println(string);
    }
    private static void test(StringBuffer ss) {
        ss.append(",天天向上");
        System.out.println(ss.toString());
    }

    private static void test(String s) {
        s+="我爱你";
        System.out.println(s); //1 abc我爱你
    }
}

在这里插入图片描述
基本数据类型和引用数据类型作为参数的区别:
1.基本数据类型的变量中直接存放数据本身,所以改的时候改的是数据本身。
2.但是引用类型不同的地方在于真正的数据并没有栈区的变量中保存,而是在堆区里面保存,虽然也复制了一份,也是副本,二者指向的是同一块内存空间。
3.引用数据类型就比如说:两个同学使用的是同一份复习资料,其中一人把资料撕毁了,另一个当然也会受到影响。而基本数据类型就是复制了一份,其中一人把资料撕毁了,并不影响另一个人。

总结:

1).当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值
2).当使用引用数据类型作为方法的形参时,若在方法体中修改形参指向的数据内容,则会

对实参变量的数值产生影响,因为形参变量和实参变量共享同一块堆区;*
3).当使用引用数据类型作为方法的形参时,若在方法体中修改形参变量的指向,此时不会

对实参变量的数值产生影响,因此形参变量和实参变量分别指向不同的堆区;*
值产生影响,因为形参变量和实参变量共享同一块堆区;*
3).当使用引用数据类型作为方法的形参时,若在方法体中修改形参变量的指向,此时不会

对实参变量的数值产生影响,因此形参变量和实参变量分别指向不同的堆区;*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值