日期:2014-05-20  浏览次数:20694 次

这个问题,越想越糊涂了,帮忙解释下
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没有变
什么情况下回变化


------解决方案--------------------
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指向原对象,因此结果不变


------解决方案--------------------
看看值传递和引用传递的区别
------解决方案--------------------
//这样就改了 自己想想会明白
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);
}
}
------解决方案--------------------
ls
形参中,对象的传递是复制地址的,并不是引用传递
------解决方案--------------------
shengli_liao(我是谁?) ( ) 信誉:100
Davis129(别信自己) ( ) 信誉:100

赞同以上两位的回答。相同答案就不多说了