在Java里如何使用运算符_Java常见运算符用法解析

Java中\_仅可用作数字字面量分隔符,如1_000_000;不能作运算符、变量名或占位符,Java 9+禁止其作为标识符,编译时会报错。

Java里没有 _ 运算符,它不是Java语言定义的运算符,不能用于算术、逻辑或位操作。你看到的 _ 通常出现在数字字面量中(如 1_000_000),是Java 7引入的**数字字面量分隔符**,仅作可读性辅助,编译时被完全忽略。

Java中哪些地方能用_?只限数字字面量内部

它只能插入在数字字面量的**数字之间**,不能开头、结尾、紧邻小数点或进制前缀(如 0x0b):

  • int a = 1_000_000; ✅ 合法,等价于 1000000
  • long b = 0x1_A2B_C3D; ✅ 十六进制中可用
  • double c = 3.14_159; ✅ 浮点数的小数部分也可用
  • int d = _100; ❌ 开头下划线报错:Invalid character in number
  • int e = 100_; ❌ 结尾下划线同样不合法
  • int f = 0x_A1; ❌ 紧邻 0x 不允许

为什么_不能当变量名或运算符用?

Java标识符规范(JLS §3.8)明确禁止 _ 单独作为标识符(从Java 9起),且它从未被定义为运算符。如果你写了类似 a _ bint _ = 5;,会直接触发编译错误:

error: illegal start of expression
    int a _ b = 10;
          ^
error: not a statement
    int _ = 5;
        ^

注意:_ 在Java 8及以前可作变量名(但不推荐),Java 9+已将其列为保留字,禁止用作标识符 —— 这和它“不是运算符”是两回事,但都说明它不具备运算功能。

常见误用场景:把Python/JS习惯带进Java

有些开发者从Python(支持 _ 作上一次表达式结果)或JavaScript(解构赋值中可用 _ 占位)转来,误以为Java也支持类似写法。实际Java中:

  • 没有交互式解释器的 _ 隐式变量机制
  • 解构赋值(如record patt

    ern)中也不支持 _ 占位(Java 21+仍不支持,需显式命名)
  • 函数参数或lambda中不能用 _ 表示“忽略”,必须写合法标识符(哪怕叫 ignored

真正要实现“忽略”语义,得靠显式声明或注释,比如 public void handle(Event e) { /* ignore */ };想提升大数字可读性,就老实用 1_000_000 —— 别试图给它赋予运算含义,编译器不会配合。