Объявление переменных? - PullRequest
       30

Объявление переменных?

0 голосов
/ 09 октября 2009
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;
        }
    }

Имеет ли декларация "я" в обоих случаях разница (кроме глобального доступа) всякий раз, когда я звоню дисплей ()?

Ответы [ 3 ]

2 голосов
/ 09 октября 2009

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

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

2 голосов
/ 09 октября 2009

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

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

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

0 голосов
/ 09 октября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...