A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马林康 中级黑马   /  2012-7-24 12:30  /  1304 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. namespace Test
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             int num = 0;
  8.             Person p = new Person("Li");
  9.             A1(p,num);
  10.             Console.WriteLine(p.name+","+num);
  11.             Console.ReadKey();

  12.         }
  13.         static void A1(Person p, int num)
  14.         {
  15.             p = new Person("Wang");
  16.             num = 1;
  17.         }
  18.     }
  19.     class Person
  20.     {
  21.         public string name;
  22.         public Person(string name)
  23.         {
  24.             this.name = name;
  25.         }
  26.     }
  27. }
复制代码
结果为什么是Li,0

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

倒序浏览

namespace Test
{
     class Program
     {
         static void Main(string[] args)
         {
             int num = 0;
             Person p = new Person("Li");//调用Person类的构造函数
             A1(p,num); //调用静态方法,此时,name=Li;   num=0
             Console.WriteLine(p.name+","+num);//所以输出为:Li,0
             Console.ReadKey();


         }
         static void A1(Person p, int num)//静态方法,无返回值
         {
             p = new Person("Wang");
             num = 1;//函数无返回值,num的值没有返回
         }
     }
     class Person
     {
         public string name;
         public Person(string name)  //构造函数,初始化公有字段name;
         {
             this.name = name;
         }
     }
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
因为A1(p,num)传入的值是在Main函数中创建的对象Person p = new Person("Li"),p.name="Li";覆盖了定义A1函数时p.name初始化的值,所以答案是Li,而不是Wang


评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 黑马杨凯 于 2012-7-24 19:23 编辑

其实你这个问题是出在了起名上了,你把对象名,静态方法参数名都写成P、num,无形中增加了自己理解的难度,你把静态方法参数改成别的,就好理解很多,不容易看错
          static void A1(Person aman, int anum)
          {
                     man = new Person("Wang");
                     num = 1;
          }   

在看   A1(p,num);
这个过程其实就相当于
  先执行
      aman=p;   anum=num;    //传进来参数
   然后执行方法体
      aman=new Person("Wang");//刚才传参让 aman指向了p指的空间,现在让aman指向new Person("Wang")所在空间,对p没任何影响
      anum=1;
  改变了局部变量,但是没有返回值,没什么影响

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
static void A1(Person p, int num)
        {
            p = new Person("Wang");
            num = 1;
这个静态方法先加载,然后   p被Person p = new Person("Li");覆盖了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
  1. static void A1(Person p, int num)
  2.         {
  3.             p = new Person("Wang");//li覆盖掉了wang,所以输出“li”
  4.             num = 1;//void型函数,无法返回值,所以输出num=0
  5.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马