java方法的参数传递机制

一、方法参数的传递

  实参给形参赋值:

  基本数据类型传递:数据值

  引用数据类型传递:地址值

  注意:String 、包装类型等对象不可变性

/**
 * java的参数传递机制测试类
 *  实参给形参赋值
 *      基本数据类型传递:数据值
 *      引用数据类型传递:地址值
 *       String、包装类型等对象不可变性
 */
public class ParamTransmitTest {
    public static void main(String[] args) {
        int i = 1;
        String str = "hello";
        Long l = 200l;
        int[] arr = {1,2,3,4,5};
        MyData myData = new MyData();

        change(i, str, l, arr, myData);
        System.out.println("i = " + i);
        System.out.println("str = " + str);
        System.out.println("l = " + l);
        System.out.println("arr[0] = " + arr[0]);
        System.out.println("myData.a = " + myData.a);
    }

    public static  void change(int j, String str, Long l, int[] arr, MyData m) {
        j += 1;
        str += "world";
        l += 1;
        arr[0] += 1;
        m.a += 1;
        System.out.println("i = " + j);
        System.out.println("str = " + str);
        System.out.println("l = " + l);
        System.out.println("arr[0] = " + arr[0]);
        System.out.println("myData.a = " + m.a);
        System.out.println("change --------");

    }

    static class MyData{
        private int a = 10;
    }
}

  运行结果:

i = 2
str = helloworld
l = 201
arr[0] = 2
myData.a = 11
change --------
i = 1
str = hello
l = 200
arr[0] = 2
myData.a = 11

二、java是值传递还是引用传递

  值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

  引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

  值传递是传递实参副本,函数修改不会影响实参;引用传递是传递实参地址,函数修改会影响实参。

  我们区分值传递还是引用传递的关键在于实参是否被函数所修改,对于引用对象来说内存地址值才是实参,被调用的函数并不会对引用对象的实参地址值进行改变。因此java是值传递。

 

posted @ 2022-06-18 18:22  风缱云流  阅读(63)  评论(0编辑  收藏  举报