theboyaply
theboyaply
发布于 2020-01-07 / 909 阅读
0
0

java基础十(值传递)

java中只有一种传参方式,值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。

值传递分为两种:基本数据类型传参和引用数据类型传参。为了更加形象的解释值传递,我们下面用“交换两个变量值”来说明。

基本数据类型传参:

public class ParamTransmit {

    public static void main(String[] args) {
        int i = 4;
        int j = 5;
        System.out.println("before: i = " + i + ", j = " + j);
        exchange(i, j);
        System.out.println("after: i = " + i + ", j = " + j);
    }

    public static void exchange(int m, int n) {
        int temp = m;
        m = n;
        n = temp;
    }

}

结果:
before: i = 4, j = 5
after: i = 4, j = 5

引用数据类型传参:

public class ParamTransmit {

    public static void main(String[] args) {
        DemoClazz demoClazz = new DemoClazz();
        demoClazz.i = 4;
        demoClazz.j = 5;
        System.out.println("before: i = " + demoClazz.i + ", j = " + demoClazz.j);
        exchange(demoClazz);
        System.out.println("before: i = " + demoClazz.i + ", j = " + demoClazz.j);
    }

    public static void exchange(DemoClazz demo) {
        int temp = demo.i;
        demo.i = demo.j;
        demo.j = temp;
    }

}

class DemoClazz {
    int i;
    int j;
}

结果:
before: i = 4, j = 5
before: i = 5, j = 4

可以看到如果传入的参数是基本数据类型,exchange方法执行之后其实没有影响到原本的变量。但是如果传入的是引用数据类型,exchange方法执行之后是影响了原本的变量的。

下面给出两张内存图分别解释下两种情况下内存中是如何运行的:

基本数据类型内存图:

基本数据类型传参内存图.png

引用数据类型内存图:

引用数据类型传参内存图.png

可变个数形参

1、可变个数形参在调用时,可以传入0~无穷多个参数。

2、若参数除了可变形参还有其它参数,可变个数参数必须声明在最后一个位置。

3、可变个数形参与数组参数的使用方式一致。

/**
 * 可变个数形参
 *
 * @param args
 */
public void test(String ...args) {
   for (String str : args) {
      System.out.println(str);
   }
}

/**
 * 数组参数
 *
 * @param args
 */
public void test2(String[] args) {
   for (String str : args) {
      System.out.println(str);
   }
}

评论