class a{
   private X abc=null;
   ...
   // I call m(abc) in main
   private void m(X a){
      System.out.println(a==abc);// a==abc is true,这里a==abc是true
      a = new Y();
      System.out.println(a==abc);// a==abc is false,为什么这里a==abc是false?
   }}

解决方案 »

  1.   


    private void m(X a){
          System.out.println(a==abc);// a==abc is true,这里a==abc是true,因为a和abc都没指向一个确定的 象,他们代表的引用值都为空,a是abc的复制
          a = new Y();
          System.out.println(a==abc);// a==abc is false,为什么这里a==abc是false?因为a指向了一个在内存中的对象,所以abc不等
       }
      

  2.   

    为啥是true呢?你给个理由吧。呵呵呵!X a 这里的a是一个局部变量,一开始他和 abc指向了同一个地方,可是你修改了a的,他和abc就指向了不同的地方了(例外,如果都是指向null,他们还是相等的)
      

  3.   

    在第一个输出语句里 a和abc拥有同一个引用 null 之后你赋给a另一个引用
      

  4.   

    LZ上次问的不明不白。早应该这么问啊,不然怎么能回答你的问题呢?这个 我估计LZ 是卡在 “==”跟“equals”的问题上了;
    可以测试一下 几个很小的语句,加深理解。简单点说:==是判断两个变量或实例是不是指向同一个内存空间
    equals是判断两个变量或实例所指向的内存空间的值是不是相同
      

  5.   

    将==作为两个对象的逻辑比较符,其结果是判断两个对象的引用是否相等。第一个:a=null, b=null => a==b
    第二个:a=new Y(), b=null => a!=b
      

  6.   

    请问如果我想要在m里面用a给abc赋值怎么做?怎样让a指向abc呢?
      

  7.   

    请问如果我想要在m里面用a给abc赋值怎么做?怎样让a指向abc呢?
      

  8.   

    new关键字的理解和java引用的概念:
      

  9.   

    我明白了,java的方法参数是传值的吧,但是如果我想要在m里面用 a 给 abc 赋值怎么做?怎样让a指向abc呢?
      

  10.   


    equals是判断两个变量或实例所指向的内存空间的值是不是相同
    这句话值得商榷,equals比较的也是引用地址,而不是值但是有的类重写了equals方法,所以比较的是值
    像String类
      

  11.   


    我觉得楼主没有明白方法里的参数如果是引用类型传的是引用地址,如果是基本数据类型传的就是值abc---->null
    传入后
    abc---->null<----a
    a = new Y()
    a------>Y

    abc---->nullabc不会指向新的对象
    即使开始abc指向了一个对象,在m方法中,让a指向一个新对象,abc也不会指向一个新对象
      

  12.   

    但是如果我想要在m里面用 a 给 abc 赋值怎么做?怎样让a指向abc呢?其实a已经指向abc了你说的用a给abc赋值,意思是不是通过a让abc指向一个新对象
    如果这样的话就没必要传abc了啊,直接在m方法里 
    abc = new Y(); 就可以了啊反正abc是成员变量
      

  13.   


    建议多了解一点java内存管理方面的东西,可以找高手请教一下
      

  14.   

    再问个笨问题class a{
       private X abc=new X();
       ...
       // I call m(abc) in main
       private void m(X a){
          // a->X<-abc
          a.Z = new Y();//如果这样,abc.Z 会指向Y,a.Z也会指向Y,为什么呢?
       }}class X{
       public Z zzz;
    }
      

  15.   

    abc--->X<---a
    a与abc指向了同一个对象a.zzz--->Y<---abc.zzz
    因为a与abc指向了同一个对象
    所以a改变对象里的值,abc也会改变对象里的值
    无论对象里的值是引用类型还是基本数据类型总结:
    引用传递
       1.在形参中改变对象的值,实参中的值也要改变
       2.在形参中改变引用指向的对象,实参中不会改变

      

  16.   


    是的,我的意思是通过a让abc指向一个新对象。
    我是想要用递归写个树的插入方法,用递归方法传入树节点,但是不能通过a让abc指向一个新对象,所以我需要换个实现的方法了
      

  17.   

    in java code == 比较的是引用,开始时,两者都为null 当然true了