方法中参数传递的机制

源代码:

public class PrimitiveTransferTest{
    public static void swap(int a,int b){
        int tmp=a;
        a=b;
        b=tmp;
        System.out.println("swap方法里,a的值是"+a+"b的值是"+b);
    }
    public static void main(String[] args){
        int a=6;
        int b=9;
        swap(a,b);
        System.out.println("交换结束后,变量a的值是"+a+"变量b的值是"+b);
    }
}

运行结果:

方法中参数传递的机制_第1张图片

源代码:

class DataWrap{
    int a;
    int b;
}
public class PrimitiveTransferTest{
    public static void swap(DataWrap dw){
        int tmp=dw.a;
        dw.a=dw.b;
        dw.b=tmp;
        System.out.println("swap方法里,a的值是"+dw.a+"b的值是"+dw.b);
    }
    public static void main(String[] args){
        DataWrap dw=new DataWrap();
        dw.a=6;
        dw.b=9;
        swap(dw);
        System.out.println("交换结束后,变量a的值是"+dw.a+"变量b的值是"+dw.b);
    }
}
运行结果:


  1.内存中存在着两种内存,一种是堆内存,还有一种是栈内存;

  2.在第一个源代码中,方法中的操作是对方法中的的a,b进行操作(方法中的a,b其实并等同于main中的a,b,他们是分别存在方法栈区和main栈区不同的值)而方法的操作是对于方法栈区的操作,main栈区的数其实并没有被改变;

  3.在第二个源代码中定义了一个数据类,在main()中定义了一引用变量dw,所以dw的实际操作是储存在堆内存中的DataWrap对象。此时,不管是main中的dw还是方法中的dw,他们此时都是DataWrap的引用变量;(这个就是C++中的指针操作可以通过函数来改变变量的值)


你可能感兴趣的:(方法,参数传递)