classA A1 = new classA
classA B1 = A1
A1 = C1//C1是从其它地方得到的
这时A1、B1、C1共用一块内存,如何让B1和A1不用一个地址

解决方案 »

  1.   

    B不随A变化,也就是B1不要等于C1
      

  2.   

    你最好把你需要做什么说清楚A1、B1、C1公用一个地址什么意思。每个变量都占有不同的内存地址,但他们指向的对象可能是一个而你现在A1 = C1了,那A1和B1指向的对象也不是同一个呀
      

  3.   

    classA实现clonable接口,重写clone函数让B1=A1.clone();
      

  4.   

    B1 = A1时,B1指向A1的地址,A1 = C1时,A1指向C1的地址,B1也相当于指向C1的地址了,不知道我这样理解对不对
      

  5.   

    LZ的意思应该是B1.equls(A1)==true吧
    让B1和A1不用一个地址?
    他们本来就不是用的一个地址,LZ概念似乎不清楚
      

  6.   

    to meteorlg(lance):
    接口我做不了,因为classA是别人写好的,我改不了
      

  7.   

    B1和A1都指向C1的地址了,我这么说对吧,我现在想不让B1也指向C1的地址
      

  8.   

    楼主,你说的对,A1和B1都是指向相同的地址,A1中变量修改了B1中也同样改变了
    如果你修改不了classA,那就实现相同的功能也可以
    classA B1=new classA();
    B1.setEachField(A1.getEachField);
      

  9.   

    to meteorlg(lance) :
    非常感谢你的回答
    但我不知道setEachField和getEachField这两个方法在哪
      

  10.   

    就是说把B1中所有的变量都设成跟A1一样啊
    就比如
    classA{
    private int id;
    private String name;
    ...//另外有get和set函数
    }
    你就应该
    classA B1=new classA();
    B1.setId(A1.getId());
    B1.setName(A1.getName());
    ...
    这样B1和A1就一样了,此时B1!=A1 ,但是B1.equal(A1)==true
      

  11.   

    楼主说都说错了.
    程序到后面B1 和 A1 并不是指向一个地址空间的,
    A1和C1才指向同一地址的.
    如果不想让他们指向的话,可以按 meteorlg 说的那样.进行一个拷贝.你可以到网上再查一下深拷贝还有浅拷贝的原理及实现方式