我只是想通过一个类的方法,实现改变其他对象的属性,为什么每次都不成功呢。。
先把代码贴上来吧。。public class test { public static void main(String[] args) 
{
obt test1=new obt();
obt test2=new obt();
obt test3=new obt();
test1.num=1;
test1.name="first";
test2.num=2;
test2.name="second";
test3.num=3;
test3.name="third";
test1.change(test2,test3);
System.out.println(test2.num);
System.out.println(test2.name);
}
}
public class obt { public int num;
public String name; public void change(obt test2,obt test3) 
{
test2=test3;
}
}每次的执行结果都是
2
second
而不是
3
third
我想到过用clone(),那么obt的change()方法就是test2=(obt)test3.clone();
可是这样也不行呀。。
请问各位高手,我该怎么写?
用clone么?如果是的话该怎么用?

解决方案 »

  1.   

    哎,很简单的错误
    public void change(obt test2,obt test3) 
        {
            test2=test3;
        }
    这个方法改变的test2和你传入的对象不是同一个,他只是一个形参,你可以返回
    public obt change(obt test2,obt test3) 
        {
            test2=test3;
            return test2;
        }
    然后在main中执行test2=test2.change(test2,test3);
      

  2.   

    改称
    public class obt {    public int num;
        public String name;    public void change(obt test2,obt test3) 
        {
            test2.num=test3.num;
            test2.name=test.num;
        }
    }
      

  3.   

    改称 
    public class obt {     public int num; 
        public String name;     public void change(obt test2,obt test3) 
        { 
            test2.num=test3.num; 
            test2.name=test3.name; 
        } 

      

  4.   


    你把引用换掉了,但是你没改变它的值啊调用change方法的对象引用的test2还是原来的test2要想改变test2的值,你得调用test2.num = ???,
      

  5.   

    首先感谢你的回答,但这段程序只是我的一个例子,在我真正的程序中,这个change()方法已经被定义成其他类型的了,不能改成obt类型。我希望的只是在这个方法内部实现对象的改变。请问有办法么。。
      

  6.   

    test2.num=test3.num;
    test2.name=test3.name;
    这样就可以了
      

  7.   

    或者在方法change中改变对象中的值:public void change(obt test2, obt test3){
        test2.num = test3.num;
        test2.name = test3.name;
    }
    把代码写成这样:public class test {    public static void main(String[] args) 
        {
            obt test1=new obt();
            obt test2=new obt();
            obt test3=new obt();
            test1.num=1;
            test1.name="first";
            test2.num=2;
            test2.name="second";
            test3.num=3;
            test3.name="third";
            test1.change(test2,test3);
            System.out.println(test2.num);
            System.out.println(test2.name);
        }
    }
    public class Obt {    public int num;
        public String name;    public void change(Obt o1, Obt o2) 
        {
            test2=test3;
        }
    }变量o1只是持有了主方法中实例化的那个对象的引用,改变o1不会改变那个对象也不会改变变量test2引用的对象。其实也可以写为:public class test {    public static void main(String[] args) 
        {
            obt test2=new obt();
            obt test3=new obt();
            test2.num=2;
            test2.name="second";
            test3.num=3;
            test3.name="third";
            test2.change(test3);
            System.out.println(test2.num);
            System.out.println(test2.name);
        }
    }
    public class Obt {    public int num;
        public String name;    public void change(Obt o1) 
        {
            num=o1.num;
            name=o1.name;
        }
    }
      

  8.   

    这样就好了啊:
    public void change(Obt test2, Obt test3) 
        {
            test2.num = test3.num;
            test2.name = test3.name;
        }
      

  9.   

    public void change(Obt test2, Obt test3) 
        {
            test2.num = test3.num;
            test2.name = test3.name;
        }
      

  10.   

        public void change(obt test2,obt test3) 
        {
            test2=test3;
        }和这样的代码是肯定不可行的,因为这里实际上是将test2指向了test3,只是修改了test2的指向,而不是修改了test2原有对象的值,所以外部对象obt是一定不会受到影响的
    你只能
    test2.x = test3.x;
    test2.y = test3.y;这样逐个属性赋值
      

  11.   

    "授人鱼,不如授之以渔"public class obt {    public int num;
        public String name;    public void change(obt test2,obt test3) 
        {
            test2=test3;
        }
    }楼主,你的这段代码中的obt test2,obt test3所指代的并不是你在main方法中new出来的test2和test3,而是在内存中新建了两个指向test2和test3的引用对象,楼主不妨把上面的方法改一下:
    public void change(obt o1,obt o2) 
        {
            o1=o2;
        }你在方法中所做的只是使内存中引用对象o1的引用指向了o2的引用,体现在你程序中便是使得o1指向了test3,但是这个过程中test2依然在内存中存在没有改变,test2所指向的对象也没有改变,所以会出现楼主所提出的结果。若想通过参数来改变对象,楼上已经提出了很好的方法:
    1.返回引用对象,就是一楼所提出的方法。
    public obt change(obt test2,obt test3) 
        { 
            test2=test3; 
            return test2; 
        } 
    不过在main中的话test1.change(test2,test3);这条语句得改成test2=test1.change(test2,test3);2.在类中改变对象的属性值,就是如同3楼的做法