class bar{ 
          int barnum = 28;
         }
class foo
{
        bar mybar = new bar();
        void change(bar mybar)
        {
        mybar.barnum = 99;
        System.out,println(barnum);
        mybar = new bar();
        mybar.barnum = 420;
        System.out,println(barnum);
        }
        
        public static void main(String s[]){
          foo f = new foo();
          System.out,println(f.mybar.barnum);            
          change(f.mybar);
          System.out,println(f.mybar.barnum);  
         }
}
我是个新手  希望高手能解释清楚一点  谢谢   

解决方案 »

  1.   

    也是新手。
    第一个打印f.mybar.barnum的值
    change方法中,第一次修改了f.mybar.barnum的值
    第二次打印99
    第二次又重新创建了一个bar,但是是局部变量,出了这个方法就无效了,所以
    第二次打印420
    第三次打印时用的是f.mybar.barnum第一次修改的值,99.
      

  2.   

    class bar{  
      int barnum = 28;
      }
    class foo
    {
      bar mybar = new bar();
      static void change(bar mybar)
      {
      mybar.barnum = 99;
      System.out.println(mybar.barnum);
      mybar = new bar();
      mybar.barnum = 420;
      System.out.println(mybar.barnum);
      }
        
      public static void main(String s[]){
      foo f = new foo();//生成foo对象,foo对象初始化bar对象,barnum=28
      System.out.println(f.mybar.barnum);   //输出28
      change(f.mybar);//调用了chang(),注意,这里传递的是对mybar的引用,这个引用指向f.mybar
                         // mybar.barnum = 99;//设置barnum为99
                       //System.out.println(barnum);输出99
                       //mybar = new bar();//mybar指向一个新的bar对象,这个bar不是f.mybar,  而   不 是一个新的bar'对象,而barnum初始化为28,这个barnum是新的bar'的成员对象,而不是foo.mybar.barnum
                       //mybar.barnum = 420;//bar'.barnum设为420
                      // System.out.println(barnum);//输出420
      System.out.println(f.mybar.barnum);  //输出f.mubar.barnum,这个barnum与赋值为420的barnum不是同一个对象的barnum  输出99 
      }
    }
    输出:[code=Java]
    28
    99
    420
    99[/code]
      

  3.   


    class bar{  
      int barnum = 28;
      }
    class foo
    {
      bar mybar = new bar();
      static void change(bar mybar)
      {
      mybar.barnum = 99;
      System.out.println(mybar.barnum);
      mybar = new bar();
      mybar.barnum = 420;
      System.out.println(mybar.barnum);
      }
        
      public static void main(String s[]){
      foo f = new foo();//生成foo对象,foo对象初始化bar对象,barnum=28
      System.out.println(f.mybar.barnum);   //输出28
      change(f.mybar);//调用了chang(),注意,这里传递的是对mybar的引用,这个引用指向f.mybar
                         // mybar.barnum = 99;//设置f.mybar.barnum为99
                       //System.out.println(barnum);输出99
                       //mybar = new bar();//mybar指向一个新的bar对象,这个bar不是f.mybar,  
                                             而 是一个新的bar'对象,而barnum初始化为28,
                                                   这个barnum是新的bar'的成员对象,而不是
                                                   foo.mybar.barnum
                       //mybar.barnum = 420;//bar'.barnum设为420
                      // System.out.println(barnum);//输出420
      System.out.println(f.mybar.barnum);  //输出f.mubar.barnum,这个barnum与赋值为420的barnum不是同一个对象的barnum  输出99 
      }
    }
    输出:28
    99
    420
    99
      

  4.   

    不错,最后一个我考虑错了。。其实是传的 bar mybar
      

  5.   

    学习了,最后f.mybar传进去一个引用,而change()里面重新构建了一个新的对象