我应该何时在变量名中使用美元符号($)?

美元符号($)是用于命名变量的有效字符,例如String superSecretFormula$; ,但是当我们谈论命名约定时,我应该何时使用此符号?

例如,下划线最常用于分隔单词,因为不允许使用空格。

你的问题被标记为Java,但看起来你问的是类型字符 ,这些字符在Visual Basic中仍然受支持,但目前还没有被广泛使用(也很长时间)。

这有点主观,但我认为可以说: 永远不会

可能希望使用$为变量名添加前缀的一种情况是编写JavaScript代码以区分jQuery对象 。

编辑

关于使用$启动变量名, Oracle Java教程告诉我们:

变量的名称可以是任何合法标识符 – Unicode字母和数字的无限长度序列,以字母开头,美元符号“ $ ”或下划线字符“ _ ”。 但是,惯例是始终用字母开头,而不是“ $ ”或“ _ ”。

来自标识符的Java语言规范 :

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

从理论上讲,你可以在变量名中使用美元符号,但强烈建议不要使用该符号,因为该符号在编译器内部使用(例如内部或匿名类的名称)。

请参考stackoverflow上的两个相关问题: 变量名中$的含义是什么? 如果存在内部类,则包含美元符号的Java类名无法编译

从不

McDowell 引用了JLS ,这是一个无法在Oracle JDK 1.8.0_45上编译的示例:

 public class Assert { static final boolean $assertionsDisabled = false; public static void main(String[] args) { assert System.currentTimeMillis() == 0L; } } 

问题是javac生成一个字段$assertionsDisabled来实现assert ,它与我们的字段冲突,而javac说:

 the symbol $assertionsDisabled conflicts with a compile synthesized symbol 

另见: https : //stackoverflow.com/a/29439538/895245

我同意,一般来说,应该避免使用特殊符号$, 正如理查德所解释的那样 。 但是,我记得在反应堆项目中使用$来定义类似jQuery的选择器 。 我认为,谨慎使用$符号可以帮助在Java中定义一些漂亮的API。

在Java中,我使用“_”作为私有类范围的非静态变量或字段的前缀,并使用“$”作为私有类宽静态变量的前缀。

它比使用“m”前缀更好,因为它不会阻止读取行。 当你开始阅读变量词时,你显然不会开始阅读“_”或“$”,对吗? 就像_addressMap$ addressMap一样,但是在Map mAddressMap中使用m就像你开始阅读它时一样令人困惑。

虽然它不是传统的Java代码,但它对标记这些变量有很大帮助,因此如果它们是否属于全class,或者是静态或非静态的,您可以及时理解它们。 当然,你必须亲自与你的队友讨论这个问题。