1、本质上java函数的传参都是传值,传引用这种说法是对基本类型和引用的区别没有理解到位
2、基本类型放在的是基本类型值,引用存放的是对象的地址
public class App {
public static void main(String[] args) throws Exception {
App app = new App();
int a = 10;
app.changeInt(a);
System.out.println(a);
}
void changeInt(int b) {
b = 20;
}
}
执行结果:
10
解析:调用changeInt函数的时候,把变量a中的值10拷贝了一份给变量b。
而函数改变只是变量b的值,从10改成20,变量a还是不变。
public class Dog {
String name;
Dog() {
name = "狗狗";
}
public void bark() {
System.out.println("Ruf!Ruf!");
}
}
public class App {
public static void main(String[] args) throws Exception {
App app = new App();
Dog d = new Dog();
app.changeDog(d);
System.out.println(d.name);
}
void changeDog(Dog e) {
e.name = "改狗名";
}
}
执行结果:
改狗名
解析:调用changeDog函数时,把引用d中的对象地址拷贝了一份给Dog e,这样d和e引用同时指向同一个对象。调用e引用的方法和变量赋值,就改动到了对象。d引用下次调用的时候,就看到了狗名的变化。