You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu终端编译Java代码时Long.parseLong报错的原因咨询

问题描述

编写了一个演示Long.parseLong用法的Java程序,在BlueJ中运行可正常输出结果。但在Ubuntu终端使用javac编译时,仅将main方法修改为标准的public static void main(String args[])后,出现cannot find symbol错误,提示找不到Long.parseLong方法;而使用java.lang.Long.parseLong则编译运行正常,咨询该差异现象的原因。

程序代码

import java.lang.*;

public class LongDemo {

   public  void main() {

      // parses the string argument
      long a = Long.parseLong("1452");
      long b = Long.parseLong("26");
      long c = Long.parseLong("54");

      long m = a * b * c;
      System.out.print("Value after multiplying = " + m);
   }
}

编译错误信息

LongDemo.java:8: error: cannot find symbol
      long a = Long.parseLong("1452");
                   ^
  symbol:   method parseLong(String)
  location: class Long
LongDemo.java:9: error: cannot find symbol
      long b = Long.parseLong("26");
                   ^
  symbol:   method parseLong(String)
  location: class Long
LongDemo.java:10: error: cannot find symbol
      long c = Long.parseLong("54");
                   ^
  symbol:   method parseLong(String)
  location: class Long
3 errors

Java版本

openjdk version "11.0.16" 2022-07-19
OpenJDK Runtime Environment (build 11.0.16+8-post-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 11.0.16+8-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)
原因分析
  • 编译报错的核心原因是当前目录下存在自定义的Long.java源文件(或编译后的Long.class文件),javac编译时会优先查找当前目录下的同名类,导致代码中的Long被解析为你自定义的类,而非java.lang.Long,而自定义的Long类没有parseLong方法,因此触发错误。
  • BlueJ的编译运行机制与终端javac不同:BlueJ默认会优先加载java.lang包下的核心类,不会被同目录的自定义同名类干扰,所以能正常运行。
  • 当使用全类名java.lang.Long.parseLong时,明确指定了要加载的是java.lang包下的Long类,编译器会直接忽略同目录的自定义同名类,因此编译运行正常。

内容的提问来源于stack exchange,提问作者Midhun Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:20:22