以下代码的输出让我感到惊讶。我认为“a”应该持有对新创建对象的引用。能否有人解释一下为什么结果不是2?
class Program
{
static void Main(string[] args)
{
aclass a = new aclass();
Process(a);
Console.WriteLine(a.number);
Console.ReadLine();
}
static void Process(aclass a)
{
aclass temp = new aclass();
temp.number++;
//Console.WriteLine(temp.number);
a = temp;
a.number++;
//Console.WriteLine(a.number);
}
}
class aclass
{
public int number = 0;
}
编辑:这是一个面试问题。我刚意识到我长时间以来对概念的误解。虽然它们引用相同的地址,但参数a与原始a不同。
a = temp
时,你会导致传递的参数与从那一点开始修改的内容之间的断开。如果你不这样做,你将在Main
中得到1
。 - Jontemp
的number
,但是你没有在Main
中定义的a
上做任何工作。 - Sam