在一个方法中,如果参数类型是普通数据类型,则该方法参数为值传递,如果参数类型是引用数据类型,则该方法参数为引用传递
package function_parameter;
public class Demo {
public static int a=10;
public static Student s=new Student("lisi",12);
public static void main(String[] args) {
System.out.println("a调用前的值:"+a);
f1(a);
System.out.println("a调用后的值:"+a);
System.out.println("s调用前的值:"+s.toString());
f2(s);
System.out.println("s调用后的值:"+s.toString());
}
public static void f1(int value){
value=20;
}
public static void f2(Student object){
object.setName("zhangsan");
object.setAge(20);
}
}
class Student{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
运行结果:
从代码以及运行结果可以看出,普通数据类型作为方法的参数,传递的只是值的拷贝,也就是value的初始化值为10,方法f1里面将value的值+10,并不会影响a的值。
而引用数据类型Student 作为方法的参数传递时,传递的是对象的引用,也就是object的初始化值为s的引用,那么object和s都指向堆中的同一个对象,所以在方法f2中修改对象的值,原对象也会被修改。