Temp=A;  //Node Temp = new Node(null); 这个对象上已经没有任何引用
现在Temp和A都是new Node("A");这个对象的引用。
就像C++里一样,2个指针指向同一个地址,修改任一个都有效。

解决方案 »

  1.   

    public static void main(String args[]) {
    Node A = new Node("A");
    Node Temp = new Node(null);
    Temp = A;
    Node B = new Node("B");
    Temp = B;
    System.out.println(A.toString());
    System.out.println(Temp.toString());
    }楼上的,照你这么说的话,我修改了一下main中的代码,这样也是Temp和A都是new Node("A")这个对象的引用,然后修改Temp使它指向B,但这个时候A并没有指向B啊,输入结果是A,B(只有Temp改变了)
    但是如果是.next确可以改变,这东西怎么这么奇怪啊
      

  2.   

    经过我的反复测试,得出这样一个结论:
    如果是A饿Temp都指向同一对象,那么改变Temp不会导致A的改变,
    但是改变Temp.next确会导致A.next的改变,这似乎不不合逻辑吧!
    请大家帮我解释这么问题,解决理解给分,不够就加分
      

  3.   

    A怎么会指向B,你只是修改了Temp你是不是c++更熟悉一些? 举个例子char *A=new char[100];       //buf1
    char *Temp= new char[100];   //buf2
    Temp=A; //c++里就有100个字节的内存泄漏
    char *B=new char[100];       //buf3 
    Temp=B;  //temp这个指针只是指向buf3,和A有什么关系?(A还是指向buf1)
      

  4.   

    这个我明白,但是我不明白的是,为什么修改Temp.next会导致A.next的改变?
    这难道与Temp的改变不影响A的改变是一个道理吗?
      

  5.   

    一个实例new Node("A");
    A和Temp都是它的引用,由于A.next==Temp.next, 修改Temp.next不就是修改了A.next
      

  6.   


    struct Node{
     Node *next;
    };struct Node node;struct Node *A = node;
    struct Node *Temp=A; //相当于 struct Node *Temp=node;理解没?
      

  7.   

    先谢谢楼上的,但是我还是迷糊,既然"由于A.next==Temp.next, 修改Temp.next不就是修改了A.next"
    为什么不能"由于A==Temp, 修改Temp不就是修改了A"?
    我不太懂c++的
      

  8.   

    需要理解java中的“引用”
    A 和 Temp都是引用
    A 指向 new Node("A")产生的地址,
    Temp指向 new Node(null)产生的地址,
    当Temp = A 就将Temp指向A指向的地址
    那么,修改Temp就相当于修改了A。因为大家都是指向同一块内存区。当Temp = B 后,Temp又指向B指向的地址了,所以现在修改Temp,就不影响原来的A了!
      

  9.   

    哦,我现在明白了,当时是把自己给饶进去了,当时想的是因为
    Node next也是一个Node类型的数据,所以我老把Node.next和Node相类比
    其实.next不过就是它的一个数据成员而已,这样想就都理解了