public class A
{
     public String name;
     public A(String name)
    {
     this.name = name;
    }
    public A()
    {
       name = "";
    }
   private static void UpdateA(A tmp)
   { 
    tmp = new A("函数里面update");
    System.out.println(tmp.name);
   }
   public static void main(String args[])
  {         
            A tmp1 = new A("第一个");
            UpdateA(tmp1);
            System.out.println(tmp1.name);
  }
}为什么tmp没有变
什么情况下回变化

解决方案 »

  1.   

    private static void UpdateA(A tmp)
       { 
        tmp = new A("函数里面update");
        System.out.println(tmp.name);
       }
    没有起作用
      

  2.   

    tmp只在UpdateA里面活动
    出了UpdateA就没有作用了
    除非它被指向或者return出来
      

  3.   

    Java中变量都是引用,最基本变量除外1、A tmp1 = new A("第一个");        //tmp1指向一个对象
    2、UpdateA(tmp1);   2.1、private static void UpdateA(A tmp)
       2.2、{ 
       2.3、 tmp = new A("函数里面update");    //tmp指向一个新对象,但tmp1指向原对象没变
       2.4、 System.out.println(tmp.name);
       2.5、}3、System.out.println(tmp1.name);       //tmp1指向原对象,因此结果不变
       
      

  4.   

    //这样就改了 自己想想会明白
    public class A
    {
         public String name;
         public A(String name)
        {
         this.name = name;
        }
        public A()
        {
           name = "";
        }     public static void change(A tmp){
    tmp.name="改了";
          }   private static void UpdateA(A tmp)
       { 
        tmp = new A("函数里面update");
        System.out.println(tmp.name);
       }
       public static void main(String args[])
      {         
                A tmp1 = new A("第一个");
                UpdateA(tmp1);
       change(tmp1);//改tmp1是改对象内容
                System.out.println(tmp1.name);
      }
    }
      

  5.   

    java是值传递 只是把实参的值传给了形参 而不是把实参传给形参
      

  6.   

    关键在这里tmp = new A("函数里面update");你把tmp 指向了新的对象。
      

  7.   

    呵呵,发一些C++的视屏,有兴趣的看一下,大家不要拍啊,跑了.
    http://www.superstarboy.cn/bbs/list.asp?lb=26
      

  8.   

    shengli_liao(我是谁?) ( ) 信誉:100 
    Davis129(别信自己) ( ) 信誉:100 赞同以上两位的回答。相同答案就不多说了