日期:2014-05-18  浏览次数:20882 次

C#面试题,并散分
出了一个面试题,如下:
请写出下面代码的运行结果,并解释为什么?
C# code
using System;
public class Test1
{
    public static void Main()
    {
        int num = 0;
        Person p = new Person("Li");
        A1(p, num);
        Console.WriteLine("{0},{1}", p.name, num);
    }
    static void A1(Person p, int num)
    {
        p = new Person("Wang");
        num = 1;
    }
}
public class Person
{
    public string name;
    public Person(string name)
    {
        this.name = name;
    }
}



10个人面试,10个人都回答错误,难道这题很难?
这是我在实际开发中遇到过的问题,所以列入了面试题中
你也来回答看看
并说说有没有必要面试这种题目

------解决方案--------------------
Li和0啊,两个都不会变
------解决方案--------------------
Person p = new Person("Li"); int num = 0;
输出的是这两个..

不可能10个人都回答错误.

------解决方案--------------------
调用A1的时候
两个p都引用Li那个对象,后来,第二个p引用了Wang,这对第一个p不会影响
两个num存储在不同位置,更不会相互影响了
所以,Li 0
------解决方案--------------------
这个不难吧?
Li,0

关键是分析这个函数:A1(Person p, int num)
P是以引用形式传进来的,num是以值形式传进来的,所以在Al()中对num的修改不会返回到调用Al()的函数中;
Al()函数中的p是引用,所以对P的修改会影响p的值,但引用也是复制后传到Al()函数中的,所以对P的副本重新赋值不会影响到p,但对p副本的属性赋值会影响到p,这大概就是引用;
------解决方案--------------------
10人都答错?不可能吧。
------解决方案--------------------
看来还是没有理解引用传递及值传递
------解决方案--------------------
怎么可能呢?LZ是哪个公司的?还招人不。
------解决方案--------------------
Li 0
------解决方案--------------------
int num = 0;
Person p = new Person("Li");
A1(p, num);

这句话打印的变量是局部的,更上面A1(p,num)没有关系。
 Console.WriteLine("{0},{1}", p.name, num);


------解决方案--------------------
探讨
看来还是没有理解引用传递及值传递

------解决方案--------------------

------解决方案--------------------
C# code

using System;
public class Test1
{
    public static void Main()
    {
        int num = 0;
        Person p = new Person("Li");
        A1(p, num);
        Console.WriteLine("{0},{1}", p.name, num);
    }
    static void A1(Person p, int num)
    {
        p.name = "Wang";
        num = 1;
    }
}
public class Person
{
    public string name;
    public Person(string name)
    {
        this.name = name;
    }
}

------解决方案--------------------
学习+接分
------解决方案--------------------
好多人学习都不注重基础的,都是拿来就用,不知就里
------解决方案--------------------
jf来的
------解决方案--------------------
亡灵
------解决方案--------------------
up
------解决方案--------------------
悄悄的路过

顺便bs一下c#

既然学java,就干脆学到底,偏偏关键字改个大小写,这不是吃饱了撑的嘛。。。。。。。。

Main:main
string:String
------解决方案--------------------