$由编译器内部使用来装饰某些名称。维基百科
gives the following example:
public class foo {
class bar {
public int x;
}
public void zark () {
Object f = new Object () {
public String toString() {
return "hello";
}
};
}
}
编译这个程序将产生三个.class文件:
> foo.class,包含main(外部)类foo
> foo $ bar.class,
包含命名的内部类foo.bar
> foo $ 1.class,包含
匿名内部类(local to method foo.zark)
所有这些类名都是有效的(因为JVM规范中允许有$符号)。
[报价]
类似地,javac在一些自动生成的变量名中使用$:例如,这个$ 0等用于从内部类到其外部类的隐式引用。
The $ character should be used only in mechanically generated source code or, rarely, to access preexisting names on legacy systems.