Java调用函数传递参数到底是值传递还是引用传递

Java调用函数传递参数到底是值传递还是引用传递

 首先先声明一下,在Java中函数传参是值传递,不是引用传递。要弄清楚这个问题之前要先弄清楚什么是值传递,什么是引用传递。

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

  引用传递(pass by reference):是指在调用函数时将实际参数的地址直接传递到函数中,这样在函数中如果对参数进行修改,将影响实际参数。

  1. 首先我们想看看值传递

    package  com.wecredo.agency.test;
    
    /**
     * @author 2S
     * @date 2020/8/31 16:22
     * @Description 值传递
     */
    public class ValuePassTest {
    
        public static void main(String[] args) {
            int a = 1;
            //传递基本数据类型,因为是将a的值传递给param,所以即便在pass函数中改变了
            //参数的值,a的值还是不会变。所以我们认为在传递基本数据类型的时候是值传递
            pass(a); 
            System.out.println("a= " + a);
        }
    
        private static void pass(int param) {
            param = 2;
            System.out.println("param= " + param);
        }
    }

    我们再看看引用传递打印的结果

  2. 我们再看看引用传递

   

package com.wecredo.agency.test;

/**
 * @author 2S
 * @date 2020/8/31 16:22
 * @Description  引用传递
 */
public class Box {
    int num;
}

/**
 * 这里传递的是一个对象,引用传递
 */
class CheckBox {
    public void check(Box box){
        box.num=100;
    }

    public static void main(String[] args) {
        Box box=new Box();
        box.num=10;
        System.out.println("调用之前box.num:"+box.num);
        CheckBox checkBox=new CheckBox();
        checkBox.check(box);
        //如果值修改了,就说说明是引用传递
        System.out.println("调用之后box.num:"+box.num);
    }
}

 

我们再看看引用传递打印的结果

 

总结:基本类型和String类型传递时,都是值传递(String类型可以自行尝试一下),其他类型都是引用传递

原文地址:https://www.cnblogs.com/shuxiaosheng/p/13590908.html