读书人

问一个对象作为函数形参的有关问题

发布时间: 2012-01-06 22:55:18 作者: rapoo

问一个对象作为函数形参的问题

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

读书人网 >J2SE开发

热点推荐