c#靜態變量賦值問題


class Program
    {
        static int i = getNum();
        int j = getNum();

        static int num = 1;

        static int getNum()
        {
            return num;
        }

        static void Main(string[] args)
        {
            Console.WriteLine("i={0}", i);
            Console.WriteLine("j={0}", new Program().j);
            Console.Read();
        }

    }
//輸出值為
i=0
j=1

分析上面的代碼

  Console.WriteLine("i={0}", i);

  這里 i 是 static 變量,在類 Program  第一次被加載時,要先為 Program  里面所有的 static 變量分配內存。盡管現在有超線程技術,但是指令在邏輯上還是逐條的按順序自上而下執行,所以 先為 static int i 分配內存,並且在該內存中保持int的缺省值0,接着再為 static int num 變量分配內存,值當然也為0。

  然后第二步,為變量賦值:先為 static int i 變量賦值,i=getNum(),看 getNum() 里面的代碼,就是return num,這個時候 num 的值是 0 ,於是 i=0 。然后對變量num賦值,num=1;這行代碼執行后,num就為1了。所以,j=1。

  所以最后的結果為:

   i=0 j=1

  注意:

  當類第一次被加載時,會對類中的靜態變量先按順序進行分配內存空間,當全部分配完內存空間之后,在對靜態變量按順序賦值。

 

  首先分為兩部分 寄存器和內存(包括緩存)

  內存分為兩部分 代碼和數據

  數據分為兩部分 靜態存儲區和運行時存儲

  運行時存儲分為 堆棧 和 堆
  靜態存儲分為 全局靜態存儲 和 常量


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM