Java 中使用 _ (下划线) 作为变量名

2025 年 1 月 7 日 | 阅读 3 分钟

在 Java 中使用下划线 (_) 作为变量名一直是开发者讨论的话题,这主要是因为它在 Java 语言约定中的演变及其对可读性、约定遵循性和最佳实践的影响。以下是对在 Java 中使用下划线作为变量名的详细探讨。

演变与历史

在早期版本的 Java 中,下划线不允许用于变量名。Java 语法严格限制变量名只能使用字母数字字符,下划线保留用于特定用途,例如分隔常量名中的单词(MAX_VALUE, MIN_VALUE)。然而,随着 Java SE 7 的引入,下划线在某些上下文中获得了新的意义,成为有效的标识符。

Java 中下划线的合法用途

Java SE 7 及更高版本中的标识符:自 Java SE 7 起,下划线可以在某些上下文中用作标识符。

  • 变量名:允许用作变量名(int _myVar;)。
  • 方法名:可以是方法名的一部分(void my_method() { ... })。
  • 类名:允许用作类名(class MyClass_ { ... })。
  • 包名:不推荐(package com.example._;)。
  • 导入语句:不推荐(import com.example._;)。

命名约定和最佳实践

  • 驼峰命名法 vs. 下划线:Java 约定通常使用驼峰命名法(CamelCase)表示变量(myVariableName),而使用下划线表示常量(MAX_VALUE)。将下划线用于变量可能会偏离此约定,但它是合法的。
  • 可读性考虑:虽然合法,但过度使用下划线作为变量名会降低代码的可读性,因为它可能不符合标准的 Java 命名约定。

Java 9 中引入的限制

从 Java 9 开始,引入了一项重大更改:禁止将单个下划线 (_) 用作标识符。此更改是语言演变的一部分,旨在防止潜在的混淆并提高代码的可读性。此更改已在 JEP 213: Milling Project Coin 中正式确定,该项目包含多项小型语言更改和更新。

如果我们在 Java 9 或更高版本中尝试将 _ 用作变量名,将会发生什么情况

编译器错误将如下所示:

为什么做出此更改?

将 _ 设为 Java 9 中的关键字的决定受到几个因素的影响:

可读性:单个下划线作为变量名不具描述性,可能使代码更难理解和维护。

未来的语言特性:将 _ 保留为关键字为未来可能受益于专用符号的语言特性留下了空间。

与其他语言的一致性:其他一些编程语言也同样不鼓励或禁止使用 _ 作为标识符。使 Java 与这些实践保持一致可以减少处理多种语言的开发者的困惑。

允许使用下划线

虽然禁止使用单个下划线,但下划线仍然可以作为变量名的一部分与其他字符结合使用:

文件名:UnderscoreExample.java

输出

 
User ID: 101
User Name: Alice   

实际考虑

兼容性和维护

  • 遗留代码:由于早期版本的 Java,旧的 Java 代码库可能不使用下划线。
  • 团队一致性:在开发团队内保持一致性至关重要。就命名约定达成一致可确保可读性和可维护性。

编译器和 IDE 支持

  • 语法高亮:现代 IDE 支持标识符中的下划线,提供语法高亮和错误检查。
  • 代码审查:将下划线用法纳入代码审查流程有助于执行最佳实践并保持可读性标准。

结论

自 Java SE 7 起,在 Java 中使用下划线作为变量名在法律上是允许的,尽管这偏离了传统的命名约定。虽然它提供了命名的灵活性,但遵循已建立的标准,例如驼峰命名法,可以显著提高代码的可读性和可维护性。

开发人员应仔细权衡使用下划线带来的优势与清晰、易于理解的代码的至关重要性,确保遵循团队一致的约定,以在整个项目中维护代码库的完整性、凝聚力和整体可读性。