先看一段代码:
public class Dog{
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
--------------------------------------------------------
public class Person{
public void add(int num){
num += 20;
System.out.println("in:"+num);
}
public void changeName(Dog dog){
dog.setName("旺财");
}
}
--------------------------------------------------------
public class Test{
public static void main(String[] args){
Dog dog = new Dog();
dog.setName("阿黄");
Person person = new Person();
int i = 10;
person.add(i);
person.changeName(dog);
System.out.println(i);
System.out.println(dog.getName());
}
}
执行的结果如下的截图:
1、在person对象调用的两个方法,分别被传入了一个基本数据类型的参数,一个引用数据类型的参数。可以看出在Test类中,输出i的值仍然是
10
,而dog的名字却变成了“旺财”。
2、结论:在方法参数的传递时,对于基本数据类型的参数,是将数值复制了一份,传给了方法的参数,自身仍然不变;而对于引用数据类型,则是将该变量的地址赋值给了方法的参数,故当方法将所指向内存的内容修改后,在返回这个引用变量时,其值已经被改变了。即:基本数据类型按值传递;引用数据类型按引用传递。