JAVA基本语法:形参与实参的区别与联系

形参:定义方法时方法参数列表上的变量

实参:调用方法时传进去的具体值


1.引用数据类型作为参数,形参的改变会影响实参的值(String类与包装类除外

引用数据类型作为参数 ---------  参数值保存在堆内存空间中,而栈内存中的对象则保存参数值在堆内存空间中的地址值

原理分析:

1.程序执行时,main方法首先进入栈内存空间;

2.实例化数组对象后,在堆内存中开辟一个整型数组空间,默认值为0,同时将地址值传给栈内存中的对象;

3.执行change方法时,形式参数传入change方法中的是数组在堆内存中的地址值,对数组重新赋值;

4.change方法执行完毕后,弹出栈内存空间,随之消亡的是传入方法体中的地址值;

5.回到main方法,执行输出语句,因为数组的地址值并未改变,传出的是数组重新赋值后的值,即arr[0]=100,arr[1]=200;

6.main方法执行完毕,弹出栈内存空间。

public class ParameterDemo{
    public static void change(int[] arr){
        arr[0] = 100;
        arr[1] = 200;
    }

    public static void main(String[] args){
        int[] arr = new int[]{10,20};
        change(arr);
        System.out.println(arr[0]);     //100
        System.out.println(arr[1]);     //200
    }
}

 引用数据类型的特殊情况:String类包装类

包装类:

                                               byte                   Byte

                                               short                  Short

                                               int                      Integer

                                               long                    Long

                                               float                    Float

                                               double                Double

                                               char                    Character

                                               boolean              Boolean

String类:直接赋值。值是保存在方法区的常量池中,方法中的局部变量保存字符串在常量池中的地址值。内容相同的字符串只存一份,并且值不可改变。若重新赋值相当于重新创建了一个新的变量。

原理分析:

1.程序执行时,main方法首先进入栈内存空间;

2.字符串类型的变量a,b存储在栈内存中。变量a,b的值存储在方法区的常量池中,并将各自的地址值传给变量a,b。

3.执行change方法,change方法进入栈内存中,变量a,b作为形式参数传入change方法中,对a,b变量重新赋值即是在常量池中寻找/创建唯一值,并将地址值传给形式参数a,b;

4.change方法执行完毕,弹出栈空间,形式参数作为局部变量也随之消亡;

5.执行打印语句,输出main方法中的实际参数。发现变量值并未改变。

public class ParameterDemo{
    public static void change(String a,String b){
        a = "一笑倾城";
        b = "二笑倾国";
    }
    public static void main(String[] args){
        String a = "persistent";
        String b = "believe";
        change(a,b);
        System.out.println(a);         //persistent
        System.out.println(b);         //believe
    }
}

2.基本数据类型作为参数,形参的改变不会影响实参的值

 基本数据类型作为参数 ----------  参数值保存在栈内存空间中,随各自方法的产生而产生,随各自方法的消亡而消亡。

原理分析:

1.程序执行时,main方法首先进入栈内存空间;

2.之后作为实参的局部变量a=10,b=20加载进main方法中;

3.之后执行change方法语句,将实参a=10,b=20传入change方法中,之后对形参重新赋值a=100,b=200;

4.change方法执行完后,弹出栈内存空间,形参a=100,b=200也随之垃圾回收;

5.回到main方法,执行输出语句,将main方法中的实参a=10,b=20打印出来。

6.程序结束,main方法弹出栈内存空间。

public class ParameterDemo{
    public static void change(int a,int b){   //静态方法体内部的参数:a,b为形参
        a = 100;
        b = 200;                     //对形参赋值
    }

    //main测试类
    public static void main(String[] args){
        int a = 10;
        int b = 20;                          //此处的a,b为实参
        change(a,b);                         //形参a,b的值在方法体内部改变
        System.out.println(a);               //10
        System.out.println(b);               //20
    }
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值