侧边栏壁纸
博主头像
威风博主等级

九万里风鹏正举,风休住,蓬舟吹取三山去。

  • 累计撰写 38 篇文章
  • 累计创建 23 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Java中的方法传递

威风
2020-10-06 / 0 评论 / 0 点赞 / 312 阅读 / 1,104 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-11-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Java中的方法传递机制

1. 代码如下

public class Test01 {

    public static void main(String[] args) {
        int a = 1;
        String b = "hello";
        Integer c = 200;
        int [] d = {1,2,3,4,5};
        E e = new E();
        change(a,b,c,d,e);

        System.out.println("a = " +a);
        System.out.println("b = " +b);
        System.out.println("c = " +c);
        System.out.println("d = " + Arrays.toString(d));
        System.out.println("e = " +e.a);
    }

    public static void change(int a1,String b2,Integer c3,int[] d4,E e5){
        a1+=1;
        b2 +="world";
        c3 +=1;
        d4[0] +=1;
        e5.a +=1;

    }


}
class E {
    int a = 10;
}

2 没调用change方法前个参数情况

如图所示

image-20200718185146615

image-20200718180615510

  • int a 是基本数据类型 又是局部变量 在main方法栈中 值为一
  • String b 是引用数据类型 b 中存放的是地址值 指向 常量池中的值
  • Integer c 是int的包装类 c 中存放的是地址值 因为200不在-128~127中 所以 在堆中开辟一块空间存放200 c 指向200
  • int d 是数组 d中存放的是地址值,在堆中开辟一块空间,存放d对应的值
  • e中有一个成员变量 所以 e.a 在堆中开辟一块空间存放 值为10 e.a指向这块空间

执行change时

image-20200718185531949

首先实参向形参传值时,当是基本数据类型时,传递的时数据值,引用数据类型时,传递的是引用地址值

image-20200718190614091

3 执行chanage的方法 各参数情况

image-20200718190713314

  • a1 = a +1 = 2

  • b2 +="world" 因为String类型是常量 不可变 拼接后会产生一个新的对象 helloworkd b2就会指向helloworld

    同时地址值发生改变0x1001

  • Integer c 由于Integer是包装类型所以 当c传入的时候 c3 = 201 同时c3的地址值发生改变 0x2001

  • int [] d 传入的时候 数组传递是引用地址值,当d4[0] +=1 的时候 0x3000对应的下标为零的值发生改变 由1变2

  • E 转入的也是地址值 此时 e5指向0x4000 e5.a+=1 红 int a = 11

    情况变成如下图所示

    image-20200718215155575

代码执行结果

image-20200718215310425

结论

  1. 实参是基本数据类型

    • 传递的是数据值
  2. 实参是引用数据类型

    • 传递地址值
    • 特殊的类型: String 包装类等对象不可变性
0

评论区