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");
   }
}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对象的内容?

解决方案 »

  1.   

    谁跟你说dog对象是被拷贝一份传入的这里传入的是Dog对象实例的一个引用,通过引用能够改变实例的具体属性,就是这样
      

  2.   


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

  3.   

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

  4.   


    那意思是:比如:change(int y)
    {
      y=10;
      return y;
    }main(){
      x=5;
      change(x);
    }这样不会改变x的值咯?
      

  5.   

    实际是就是"拷贝"
    因为int是字面值类型变量,就是直接复制值
    而String是引用类型变量,它的值是一个"地址值",也是一个值而已.但这个值是地址值.
    int的值是数字,复制数值
    String的值是地址值,也就是对象的引用.复制的是引用.
      

  6.   

    怎么这个东西这么多人问啊,下面一个地址看看就懂了http://blog.csdn.net/mengxiangyue/article/details/6818611