本文是节选自stackoverflow中的答案做一个总结,方便自己日后查看。
结论:Java没有传引用,只有传值
Dog myDog;
myDog实际上是一个指向Dog的指针,不是真实的Dog。
Dog myDog = new Dog("Rover");
fuc(myDog);
假定新创建的Dog对象存在内存地址42的位置
使用fuc()函数传入的是 Dog对象 myDog的地址(也就是42)
public void fuc(Dog someDog) {
someDog.setName("Max"); // AAA
someDog = new Dog("Fifi"); // BBB
someDog.setName("Rowlf"); // CCC
}
someDog指针指向内存地址42
执行完AAA后,内存地址42处的Dog对象Name被修改成了“Max”
执行完BBB后,someDog指针指向了一个新创建的Dog对象,内存地址为62
执行完CCC后,修改的是内存地址为62处的对象
所以fuc()函数执行返回后,myDog指针指向的地址处Name仍然是“Max”
如果是传引用的话,在BBB地方,myDog也就指向新的内存62了