Вопрос-ответ

What is the meaning of $ in a variable name?

Что означает $ в имени переменной?

Недавно я прочитал, что знак $ разрешен в именах переменных Java, но имеет особое значение. К сожалению, не указано, в чем заключается это особое значение.

Поэтому я спрашиваю здесь: каково особое значение $ в именах переменных в Java?

Вот точная цитата из


Java: введение в решение задач и программирование


от Уолтера Сэвича:


Java действительно допускает появление символа доллара $ в идентификаторе, но эти идентификаторы имеют особое значение, поэтому вам не следует использовать символ $ в своих идентификаторах.


Переведено автоматически
Ответ 1

$ используется компилятором внутренне для оформления определенных имен. Википедия приводит следующий пример:

public class foo {
class bar {
public int x;
}

public void zark () {
Object f = new Object () {
public String toString() {
return "hello";
}
};
}
}

При компиляции этой программы будут созданы три файла .class:


  • foo.class, содержащий основной (внешний) класс foo

  • foo$bar.class, содержащий именованный внутренний класс foo.bar

  • foo$1.class, содержащий анонимный внутренний класс (локальный для метода foo.zark)

Все эти имена классов допустимы (поскольку $ символы разрешены в спецификации JVM).

Аналогичным образом, javac используется $ в некоторых автоматически генерируемых именах переменных: например, this$0 и др. используются для неявных this ссылок из внутренних классов на их внешние классы.

Наконец, JLS рекомендует следующее:


Символ $ следует использовать только в механически сгенерированном исходном коде или, в редких случаях, для доступа к уже существующим именам в устаревших системах.


Ответ 2

В имени переменной нет особого значения для $.

Хотя технически это разрешено, начало имени переменной со знака доллара противоречит соглашению, обычно используемому только генераторами кода.

Процитируем руководство по Java от Oracle:


Имена переменных чувствительны к регистру. Именем переменной может быть любой разрешенный идентификатор — последовательность букв и цифр Unicode неограниченной длины, начинающаяся с буквы, знака доллара "$" или символа подчеркивания "_". Однако по соглашению имена переменных всегда должны начинаться с буквы, а не с "$" или "_". Кроме того, символ знака доллара, по соглашению, вообще никогда не используется. Вы можете столкнуться с некоторыми ситуациями, когда автоматически сгенерированные имена будут содержать знак доллара, но в именах переменных всегда следует избегать его использования. Аналогичное соглашение существует для символа подчеркивания; хотя технически законно начинать имя вашей переменной с "_", эта практика не рекомендуется. Пробелы не допускаются.


java