首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个入门的有关问题,求指点

2013-11-05 
一个入门的问题,求指点如下代码为什么不能赋值成功啊,迷惑[解决办法]class Foo {String value}public cla

一个入门的问题,求指点
如下代码为什么不能赋值成功啊,迷惑


[解决办法]
class Foo {
    String value;
}
public class Test {
    private static void copyFoo(Foo f) {
        Foo f1 = new Foo();
        f1.value = "xxx";
        System.out.println(f1.value);
        System.out.println("copyFoo类内f1的地址:"+f1);
        System.out.println("传入copyFoo方法后的f地址:"+f);
        f = f1;
        System.out.println("执行了f=f1后的f地址:"+f);
    }
    public static void main(String[] args) {
        Foo f = new Foo();
        System.out.println("f初始化时的地址:"+f);
        copyFoo(f);
        System.out.println("执行完copyFoo(f)后的地址:"+f);
        System.out.println(f.value);
    }
}
输出类似:
f初始化时的地址:Foo@2687816d
xxx
copyFoo类内f1的地址:Foo@a422ede
传入copyFoo方法后的f地址:Foo@2687816d
执行了f=f1后的f地址:Foo@a422ede
执行完copyFoo(f)后的地址:Foo@2687816d
null
可以看到copyFoo(Foo f)这样,仅仅是把f的形参指向改了,但f.value并没有变化。
你可以再试试这样:
class Foo {
    String value;
}
public class Test {
    private static void copyFoo(Foo f) {
        Foo f1 = new Foo();
        f1.value = "xxx";
        System.out.println(f1.value);
        System.out.println("copyFoo类内f1的地址:"+f1);


        System.out.println("传入copyFoo方法后的f地址:"+f);
        f.value = f1.value;
        System.out.println("执行了f=f1后的f地址:"+f);
    }
    public static void main(String[] args) {
        Foo f = new Foo();
        System.out.println("f初始化时的地址:"+f);
        copyFoo(f);
        System.out.println("执行完copyFoo(f)后的地址:"+f);
        System.out.println(f.value);
    }
}
把f=f1换成 f.value = f1.value;结果就变成这样了:
f初始化时的地址:Foo@2687816d
xxx
copyFoo类内f1的地址:Foo@a422ede
传入copyFoo方法后的f地址:Foo@2687816d
执行了f=f1后的f地址:Foo@2687816d
执行完copyFoo(f)后的地址:Foo@2687816d
xxx
可以看到f的指向一直没有变化,而value值却变化了。
[解决办法]
f为形参,copyFoo方法只是改了f的指向,而没改变他的内容

热点排行