Java传值还是传引用

2016/3/31 posted in  Java

Java都是按值传递的。

我们要这样去理解这个问题:

Dog myDog;

myDog并不是一个Dog,而是一个指针指向了一个Dog对象。

Dog myDog = new Dog("Rover");
foo(myDog);

这个程序实际上是将new Dog("Rover")这个对象地址的值给了foo方法

假设new Dog("Rover")这个对象在内存地址的42,也就是说我们将42这个地址给了foo方法

public void foo(Dog someDog) 
{
    someDog.setName("Max");     // AAA
    someDog = new Dog("Fifi");  // BBB
    someDog.setName("Rowlf");   // CCC
}
  • someDog被设置为了42
  • AAA
    • someDog这个对象(42)被要求改名为Max
  • BBB
    • 生成一个新的Dog对象,比如说在地址74
    • 我们将someDog这个对象设置成74
  • CCC
    • someDog这个对象(74)被要求改名为Rowlf
  • 最后,我们返回结果

因为我们传的只是42这个内存地址的值,所以返回后,someDog还是(42),只是他的名字变成了Max

Reference

http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value