it-swarm.cn

变量名中$的含义是什么?

最近我读到了Java变量名中允许使用符号$,但具有特殊含义。不幸的是,没有提到这个特殊含义是什么。

因此我在这里问:Java中变量名的$的特殊含义是什么?

这是来自的确切报价

Java:问题解决和编程简介

来自Walter Savitch:

Java允许美元符号符号$出现在标识符中,但这些标识符具有特殊含义,因此您不应在标识符中使用$符号。

52
anon

$在编译器内部用于装饰某些名称。维基百科 给出以下示例

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,包含匿名内部类(方法foo.zark的本地)

所有这些类名都有效(因为JVM规范中允许使用$符号)。

类似地,javac在一些自动生成的 变量名称中使用$:例如,this$0等用于从内部类到其外部类的隐式this引用。

最后, JLS建议如下

$字符只能用于机械生成的源代码,或者很少用于访问遗留系统上的预先存在的名称。

51
NPE

没有特殊意义

“变量名称区分大小写。变量的名称可以是任何合法标识符 - Unicode字母和数字的无限长度序列,以字母开头,美元符号”$“或下划线字符”_“。但是,总是用一个字母开始你的变量名,而不是“$”或“_”。另外,按照惯例,美元符号字符根本就不会被使用。你可能会发现一些自动生成名称的情况包含美元符号,但你的变量名应该总是避免使用它。下划线字符存在类似的约定;虽然用“_”开始变量的名称在技术上是合法的,但不鼓励这种做法。不允许使用空格。“

34
pablosaraiva