日期:2014-05-17  浏览次数:20439 次

大家速度来答一下这一条面试题,苦思很久,找不到原因,回答不了!!!!!!!!!!!!!
public static class Class1
{
  public static void aa(int i)
  {
  i = i + 9;
  }
}

int i = 2;

Class1.aa(i);

Response.Write(i);

输出I为2;

public static class Class1
{
  public static void aa(string i)
  {
  i = i + 9;
  }
}

string i = 2;

Class1.aa(i);

Response.Write(i);

输出I为29;

两个方法程,为什么第一个,Class1.aa(i);运行了,I的结果没有改变,第二个运行了,I的结果相加了,请说明原因!

高手来答一下

------解决方案--------------------
int是值类型
string是引用类型

值类型和引用类型的区别,就在于当函数参数传递的时候.
值类型是把自己的值复制一份传递给别的函数操作.无论复制的值怎么被改变.其自身的值是不会改变的
而引用类型是把自己的内存地址传递给别的函数操作.操作的就是引用类型值的本身.所以值被函数改变了.
这就是传值和传址的区别
------解决方案--------------------
第二个应该也不变吧 string是引用传递
但是string又有值传递的效果,这是因为string是常量,不能更改,所以如果在函数里更改的话,其实是生成了另外一个string,但是原来的string还在,函数外的string还是原来的string。函数里的string指向另外一个新生成的string,给人一种值传递的假象