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

Java参数传递:了解Java中参数传递的机制

发布时间:2023-07-06 10:35:41

Java中参数传递的机制是通过值传递(pass by value)实现的,即方法调用时实参的值被复制给形参。这里需要区分基本类型和引用类型的参数传递。

对于基本类型(如int、float等),参数传递是将实际参数的值复制一份给形式参数,在方法内部对形式参数的修改不会影响到实际参数。示例如下:

public static void changeValue(int value) {
    value = value + 1;
    System.out.println("形参value的值为:" + value);
}

public static void main(String[] args) {
    int num = 10;
    System.out.println("调用changeValue方法之前,num的值为:" + num);
    changeValue(num);
    System.out.println("调用changeValue方法之后,num的值为:" + num);
}

输出结果为:

调用changeValue方法之前,num的值为:10
形参value的值为:11
调用changeValue方法之后,num的值为:10

可以看到,虽然在changeValue方法中修改了形参value的值,但是并没有影响到实参num的值。

对于引用类型,传递的是引用的副本,也就是传递的是对象的地址。因此,在方法内部对引用类型参数的修改会影响到实际参数指向的对象。示例如下:

class Person {
    int age;
}

public static void changeAge(Person person) {
    person.age = person.age + 1;
    System.out.println("形参person的age为:" + person.age);
}

public static void main(String[] args) {
    Person p = new Person();
    p.age = 20;
    System.out.println("调用changeAge方法之前,p的age为:" + p.age);
    changeAge(p);
    System.out.println("调用changeAge方法之后,p的age为:" + p.age);
}

输出结果为:

调用changeAge方法之前,p的age为:20
形参person的age为:21
调用changeAge方法之后,p的age为:21

可以看到,changeAge方法中修改了形参personage值,影响到了实参p指向的对象的age值。

需要注意的是,当引用类型参数被重新赋值时,不会影响到原来实参指向的对象。示例如下:

public static void changeReference(Person person) {
    person = new Person();
    person.age = 30;
    System.out.println("形参person的age为:" + person.age);
}

public static void main(String[] args) {
    Person p = new Person();
    p.age = 20;
    System.out.println("调用changeReference方法之前,p的age为:" + p.age);
    changeReference(p);
    System.out.println("调用changeReference方法之后,p的age为:" + p.age);
}

输出结果为:

调用changeReference方法之前,p的age为:20
形参person的age为:30
调用changeReference方法之后,p的age为:20

可以看到,虽然changeReference方法中将形参person重新赋值为一个新的Person对象,并修改了age值,但是并没有影响到实参p指向的对象。