2009-10-09 270 views
0
Case:1 

    class A 
    { 
     private int i=0; 

     public void display() 
     { 
      this.getValue(); 
     } 

     private int getValue() 
     { 
      return i+2; 
     } 

    } 

Case:2 

    class B 
    { 
     public void display() 
     { 
      int i=0; 
      this. getValue(i); 
     } 

     private int getValue(int i) 
     { 
      return i+2; 
     } 
    } 

每當我打電話給 display()時,這兩種情況下的「i」聲明是否有很大的差異(除全局訪問以外)有什麼差異 ?變量聲明?

+0

您可能想要提及您正在使用哪種語言。答案在C/C++/C#/ Java系列中可能是相同的,但有可能它不是。 – ctford 2009-10-09 11:43:07

回答

2

在這種情況下效果是相同的,但第一個片段中的類的實例將佔用更多的內存。

除第一種情況外,它是一個變量,每次調用時都有相同的地址,並保留該值,但在第二種情況下,它不一定是具有相同地址的變量 - 每次調用時都會重新分配並重新初始化。

因爲你其實並不曾改變i變量的值,你應該把它聲明爲const - 這將給更加清晰的代碼。

+0

除非這是Java,否則'const'不存在。 – Jesper 2009-10-09 13:12:42

+0

在Java中對於同樣的'最終'不是? – sharptooth 2009-10-09 13:54:16

0

在第一種情況下i存在任何方法

在第二種情況下i之外只存在時display()方法被調用。如果你想給它持久性,你可以聲明它爲static

+0

除非這是Java,否則本地靜態變量不存在。 – Jesper 2009-10-09 13:13:22

2

在第一種情況下,我是對象的一部分。當你從類A創建一個對象時,對象爲變量「i」分配內存。它會一直保留,直到對象被刪除。

但在第二種方式中,當您從類B創建對象時,將不會爲變量i分配內存。但是隻有當你調用顯示函數時 - 在類B-內存變量「我」將暫時分配。 (函數的工作完成後,所有局部變量都將釋放)