Ключевое слово this для instance

Рейтинг: 2Ответов: 2Опубликовано: 10.04.2015

Обязательно ли всегда для instance добавлять ключевое слово this? Например, есть такой код, где power - instance:

int work(int time)
    {
        return time * this.power;
    }

Ведь если убрать this, java всё равно поймет, что мы забыли дописать this, и результат будет тот же. То есть java сначала пойдет в stack, там power не найдет и потом пойдет в heap. Разница только в том, что java лишнее действие сделает.

Я всё правильно понимаю? Если да, объясните зачем писать this.

Ответы

▲ 7Принят

Чтобы можно было безболезненно делать такие штуки:

void setPower(int power) {
    this.power = power;
}

Т.е. чтобы обечпечить возможность доступа к свойству в любой ситуации, если я правильно понимаю, компилятор сам подставляет this куда надо. В яваскрипте, например, такой штуки с областью видимости нет, оттуда появляются всякие var self = this.

▲ 2

this необязателен. Но удобен, например, чтобы отличать параметр метода/локальную переменную от поля:

public void Foo(string text) {
    this.text = text;
}

Вообще хочу сказать, что если нет какого-то шаблона наименования полей (например, с подчеркиванием: _field), то использовать this весьма удобно: в дебрях кода глаз сразу распознает "тип": поле или локальная переменная/параметр. Поэтому я бы рекомендовал его использовать, разгрузите себе голову.