关于赋值的疑义

关于赋值的疑问
请大神看下这两句话的结果为什么不同,我的问题来自值传递与引用传递;
public  static void changeint(int n)
{
   n=123;
}
public static void Main()
{
   int num=8;
  changeint(num);
Console.Write(num);
Console.Read();

}
//上一段代码的运行结果是8,因为值传递不改变实参
代码二:
public static void Main()
{
   int a=10;
   a =20;
   Console.WriteLine(a);
  Console.Read();
}
//为什么第二次运行结果是20,它不是值传递吗?难道只有在方法里调用形参的才有可能是值传递,否则都是引用传递吗?
求大神给个解释,感激不尽!

------解决方案--------------------
你根本就没调用任何方法,哪里来的传递。

所谓传递就是说主程序和函数参数之间交换才有传递。
同一个函数里面一个变量不存在传递。
------解决方案--------------------
第二次没有进行参数传递,只是重新赋值罢了
------解决方案--------------------
你需要恶补基础了
搜一下:值类型,引用类型,值传递,引用传递
先明确了概念再说.

int a,a是值类型,但是你没有调用任何函数,所以根本不存在传递的问题
------解决方案--------------------
目测你一定是把值类型和值传递搞混了
------解决方案--------------------
首先要知道,在调用一个函数的时候,函数的参数都是函数内部的一个局部变量,只能在函数内部使用,都会在栈中分配一块空间,你上面的代码中的 changeint(num);执行的时候,首先会在栈中分配一块空间 给变量 n ,然后将num 变量所在的空间的值直接复制一份给n 变量中的存储区去,也就是函数形参变量 n 和 num 所在的空间是不一样的,而你的第二份代码中的
int a=10;
a =20;
Console.WriteLine(a);中的两次操作的都是同一个变量,也就是操作的是同一块存储区,都是给a变量所指向的那块内存区域。所以结果是20,

所谓的值传递是指两个值类型变量之间的赋值关系,不一定是调用函数的时候,比如说int a=10 int b=20,  b=a; 那么此时就是值传递,也就是b的值变为了10,如果此时再给 b=40,那么 a的值还是10,因为 a 和 b所指向的是两块不同的内存空间。

值类型和引用类型的变量的区别是:
值类型的变量中是直接存储我们得数据的,
而引用类型的变量里并不是直接存储数据,而是存储数据的引用而已,这里的数据是指面向对象中的对象。
------解决方案--------------------
首先,楼主你知道什么叫做参数传递吗?
先不扯值类型、引用类型参数传递的概念,就说参数传递
int a=10;
    a =20;
这里有参数传递的感念吗?这只是普通的初始化、重新赋值,从堆栈的概念上说就是就是在堆栈上分配a的内存并值为10,然后再把这个内存上的值改为20,没有任何传递参数的感念。。

其次关于值类型传递和引用类型传递,我想楼主应该先去了解下什么是值类型,什么是引用类型,分析他们的内存占用,然后再分析值类型传递和引用类型传递