Java基础之参数传递

方法的传参机制

先贴一段代码,查看一下运行结果

import java.util.Arrays;

public class test {
    public static void main(String[] args) {
        int i = 1;
        String s = "hello";
        Integer num = 200;
        int[] array = {1,2,3,4,5};
        Myclass my = new Myclass();

        change(i,s,num,array,my);
        System.out.println("i = " + i);
        System.out.println("s = " + s);
        System.out.println("num = " + num);
        System.out.println("array = " + Arrays.toString(array));
        System.out.println("my.a = " + my.a);

    }

    public static void change(int j, String str, Integer n, int a[], Myclass m){
        j+=1;
        str += "world";
        n += 1;
        a[0] += 1;
        m.a += 1;
    }
}
class Myclass{
    int a = 8;
}

在这里插入图片描述

接下来进行分析

首先要明确两个要点:

  • 若形参是基本数据类型,则我们传递的是数据值
  • 若形参是引用数据类型,则我们传递的是地址值

我们先画出相应的内存区域(地址是随便写的)

在这里插入图片描述

然后我们在执行change方法的时候,进行相应的参数传递,遵照上面两个原则,

基本数据类型int 传递的是数据值,其余传递的都是地址值:
在这里插入图片描述

接下来进行相应的运算,我们可以发现直接传递数据的基本类型并没有发生改变,而直接传递地址并修改对应值的变量都发生了相应的改变(例如Mycalss的a,以及数组a[0]),而num与str有点特殊,因为str在进行字符串拼接的时候,会在常量池创建出一个新的常量,并且将相应变量地址变为新的字符串地址,因此str的地址也别发生相应的改变,而原地址所指向的常量并没有发生对应的改变,还是hello
在这里插入图片描述

num同理
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值