大家速度来答一下这一条面试题,苦思很久,找不到原因,回答不了!!!!!!!!!!!!!
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,给人一种值传递的假象