Qual é o significado de $ em um nome de variável?

Recentemente li que o sinal $ é permitido em nomes de variables ​​Java, mas tem um significado especial. Infelizmente não é mencionado qual é esse significado especial.

Por isso, pergunto aqui: Qual é o significado especial de $ em nomes de variables ​​em Java?

Aqui está a citação exata de

Java: uma introdução à solução de problemas e programação

de Walter Savitch:

Java permite que o símbolo de cifrão $ apareça em um identificador, mas esses identificadores têm um significado especial, portanto você não deve usar o símbolo $ em seus identificadores.

$ é usado internamente pelo compilador para decorar certos nomes. A Wikipedia fornece o seguinte exemplo :

 public class foo { class bar { public int x; } public void zark () { Object f = new Object () { public String toString() { return "hello"; } }; } } 

Compilar este programa produzirá três arquivos .class:

  • foo.class , contendo a class principal (externa) foo
  • foo$bar.class , contendo a class interna nomeada foo.bar
  • foo$1.class , contendo a class interna anônima (local para o método foo.zark )

Todos esses nomes de classs são válidos (como $ símbolos são permitidos na especificação da JVM).

Em uma veia similar, o javac usa $ em alguns nomes de variables gerados automaticamente: por exemplo, this$0 et al são usados ​​para as referências implícitas das classs internas para suas classs externas.

Finalmente, o JLS recomenda o seguinte :

O caractere $ deve ser usado somente em código-fonte gerado mecanicamente ou, raramente, para acessar nomes preexistentes em sistemas legados.

Não há um significado especial para isso :

“Os nomes de variável diferenciam maiúsculas e minúsculas. O nome de uma variável pode ser qualquer identificador legal – uma seqüência de comprimento ilimitado de letras e dígitos Unicode, começando com uma letra, o cifrão” $ “ou o caractere de sublinhado” _ “. , no entanto, é sempre começar seus nomes de variables ​​com uma letra, não “$” ou “_”. Além disso, o caractere de cifrão, por convenção, nunca é usado. Você pode encontrar algumas situações em que os nomes gerados automaticamente contém o cifrão, mas os nomes das variables ​​devem sempre evitar usá-lo. Uma convenção similar existe para o caractere sublinhado; embora seja tecnicamente legal começar o nome da variável com “_”, essa prática não é recomendada. Espaço em branco não é permitido. ”