日期:2014-05-20  浏览次数:20656 次

问一个对象作为函数形参的问题
Java code
public class Welcome
{
   public static void main(String[] args)
   {
      Dog dog = new Dog("bush");

      System.out.println(dog.getName());
      Test(dog);
      
      System.out.println(dog.getName());
   }
   public static void Test(Dog dog){
       dog.setName("obama");
   }
}



Java code

public class Dog {
    private String Name;
    public Dog(String Name){
        this.Name = Name;
    }
    public String getName() {
        return Name;
    }
    public void setName(String name) {
        Name = name;
    }

}



输出

bush
obama

为何?

dog对象不是被拷贝一份然后传入函数再进行操作吗?

如何能改变原始的那个dog对象的内容?



------解决方案--------------------
谁跟你说dog对象是被拷贝一份传入的

这里传入的是Dog对象实例的一个引用,通过引用能够改变实例的具体属性,就是这样


------解决方案--------------------
int 是直接数,还有如果传入的是不可变类,都可以这样理解 ,就你说的“拷贝”
探讨

引用:

谁跟你说dog对象是被拷贝一份传入的

这里传入的是Dog对象实例的一个引用,通过引用能够改变实例的具体属性,就是这样


那如果函数的形参是int 类型,那就是拷贝了吧。

------解决方案--------------------
只是把对象的地址传进去,并没有拷贝..
------解决方案--------------------
实际是就是"拷贝"
因为int是字面值类型变量,就是直接复制值
而String是引用类型变量,它的值是一个"地址值",也是一个值而已.但这个值是地址值.
int的值是数字,复制数值
String的值是地址值,也就是对象的引用.复制的是引用.
------解决方案--------------------
怎么这个东西这么多人问啊,下面一个地址看看就懂了http://blog.csdn.net/mengxiangyue/article/details/6818611