欢迎访问宙启技术站
智能推送

Java中的参数传递:值传递和引用传递

发布时间:2023-06-20 06:01:51

在Java中,方法的参数传递方式分为两种:值传递和引用传递。这两种传递方式的区别在于传递的数据类型不同,以及传递方式对数据的影响不同。

值传递

值传递是指将变量的值复制一份传递给方法,方法的操作不会影响到原变量的值。可以理解为将变量的值打包成一个盒子,然后将盒子复制一份传递给方法,方法可以对盒子进行任意操作,但不会影响到原来的盒子。在Java中,基本数据类型的传递方式就是值传递。

例如:

public static void changeInt(int a) {
    a = 100;
    System.out.println("方法中a的值:" + a);
}
public static void main(String[] args) {
    int num = 10;
    changeInt(num);
    System.out.println("方法执行完后num的值:" + num);
}

在该代码中,主函数中定义了一个变量num,并将其赋值为10。接着调用了changeInt方法,并将num作为参数传递给了方法。在changeInt方法中,将a的值赋为100,并输出a的值。然后,在主函数中再次输出num的值。结果为:

方法中a的值:100
方法执行完后num的值:10

从结果可知,changeInt方法并没有改变num的值,这说明值传递不会对原变量的值进行修改。

引用传递

引用传递是指将变量所在的内存地址(或者说地址值)传递给方法,方法通过该地址访问变量所在的内存空间,可以对变量进行修改。可以理解为将变量的地址打包成一个盒子,然后将盒子复制一份传递给方法,方法可以通过该盒子找到对应变量的实际地址,并对其进行任意操作。

在Java中,对象类型的传递方式就是引用传递。例如:

public static class Person {
    int age;
}
public static void changePerson(Person p) {
    p.age = 20;
    System.out.println("方法中Person的age值:" + p.age);
}
public static void main(String[] args) {
    Person person = new Person();
    person.age = 10;
    changePerson(person);
    System.out.println("方法执行完后Person的age值:" + person.age);
}

在该代码中,创建了一个Person对象,并将其age属性赋值为10。然后调用了changePerson方法,并将Person对象作为参数传递给了方法。在changePerson方法中,将Person对象的age属性修改为20,并输出age的值。然后再次输出Person对象的age属性。结果为:

方法中Person的age值:20
方法执行完后Person的age值:20

从结果可知,changePerson方法修改了Person对象的age属性,并且该修改对原对象也生效了。这说明,在引用传递中,方法对对象进行的修改是会影响到原对象的。

综上所述,Java中的参数传递方式分为值传递和引用传递。值传递是将变量的值复制一份传递给方法,方法的操作不会影响到原变量的值;而引用传递是将变量所在的内存地址传递给方法,方法可以通过该地址访问变量所在的内存空间,可以对变量进行修改,并且修改对原对象也会生效。需要根据不同的实际需求选择不同的传递方式。