Java参数在方法中的传递

来源:互联网 发布:索金十数据官网 编辑:程序博客网 时间:2024/05/16 17:09

实际代码

public class demo8 {    void fun1(int i, int j) {        i = i + 5;        j = j + 5;        System.out.println("fun1-i:" + i);        System.out.println("fun1-j:" + j);    }    void fun1(P y) {        y.i = y.i + 5;        y.j = y.j + 5;        System.out.println("fun1-y-i:" + y.i);        System.out.println("fun1-y-j:" + y.j);    }    public static void main(String[] args) {        demo8 x = new demo8();        int i = 10;        int j = 20;        x.fun1(i,j);        System.out.println("main-i:" + i);        System.out.println("main-j:" + j);        System.out.println("================");        P y = new P();        y.i = 10;        y.j = 20;        x.fun1(y);        System.out.println("main-y-i:" + y.i);        System.out.println("main-y-j:" + y.j);    }}class P {    int i;    int j;}

具体的解析

当方法中参数是基本类型时:

  1. 在栈区储存
    这里写图片描述

  2. 在栈区中创建参数的副本
    这里写图片描述

  3. 对副本进行操作
    这里写图片描述

    结论:基本类型的值在操作后原始的值并没有改变

当方法中参数是类类型(引用类型)时:

  1. 在栈区储存类(对象)在堆区的地址,在堆区储存具体的类的属性和方法
    这里写图片描述

  2. 在栈区创建类在堆区的副本,并且这个副本还是指向之前的堆区地址
    这里写图片描述

  3. 对类在堆区储存的属性和方法进行操作
    这里写图片描述
    结论:类类型的值在操作后,原始的值会发生变化