2009-10-09 9 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; 
     } 
    } 

Имеет ли декларацию «i» в обоих случаях отличную разницу (кроме глобального доступа), когда я вызываю display()?Объявление переменных?

+0

Возможно, вы захотите указать, какой язык вы используете. Ответ, вероятно, будет одинаковым в семействе C/C++/C#/Java, но есть вероятность, что этого может не быть. – ctford

ответ

2

В этом случае эффект будет таким же, но экземпляр класса в первом фрагменте займет больше памяти.

Кроме этого в первом случае это переменная с одним и тем же адресом для каждого вызова, и она сохраняет значение, но во втором случае это не обязательно переменная с тем же адресом - она ​​перераспределяется и повторно инициализируется при каждом вызове ,

Поскольку вы на самом деле никогда не изменяете значение переменной i, вы должны объявить его как const - это даст более четкий код.

+0

За исключением случаев, когда это Java, где 'const' не существует. – Jesper

+0

Разве это не 'final' для Java? – sharptooth

0

В первом случае i существует вне любого метода

Во втором случае i существует только тогда, когда display() метод вызывается. Если вы хотите, чтобы вы настойчивости, вы можете объявить его static.

+0

За исключением случаев, когда это Java, где локальные статические переменные не существуют. – Jesper

2

В первом случае i является частью объекта. Когда u создает объект из класса A, объект выделяет память для переменной «i». И он останется, пока объект не будет удален.

Но во втором случае при создании объекта из класса B не будет выделено выделение памяти для переменной i. Но только когда вы вызываете функцию отображения - в классе B - переменная памяти «i» будет временно выделена. (Когда выполняются функции, все локальные переменные освободятся)

Смежные вопросы