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

Java代码调用Long.valueOf()函数时抛出运行时异常问题排查

异常触发原因

NumberFormatException的触发逻辑非常明确:

  • 代码中使用Long.valueOf()做字符串转数值的逻辑,long是Java的基础整数类型,对应的解析方法只能识别不含小数点、非科学计数法的纯整数字符串。
  • 你传入的命令行参数是34.678、46.322这类带小数点的浮点数字符串,解析逻辑遇到小数点就会判定格式非法,直接抛出数字格式异常。
关于「传整数时提示异常但仍能输出结果」的说明

这个现象和代码逻辑、运行流程有关:

  • 如果传入两个合法整数字符串,Long.valueOf()可以正常解析,代码会顺利走到求和输出的逻辑,根本不会进入catch块,也不会打印异常栈。
  • 出现异常提示说明运行过程中确实触发了异常,最常见的两种原因:一是运行时没传够2个命令行参数,取args[0]/args[1]时触发了数组下标越界异常,控制台混了之前运行的错误日志;二是修改代码后没有重新执行javac命令编译,运行的是旧版本的class文件。
修正方案

如果需要支持整数、浮点数混合求和,把数值类型换成double即可,Double.valueOf()可以兼容解析整数字符串和浮点数字符串,修正后代码如下:

public class testforfun {
    public static void main(String[] args) {
        try{
            if(args.length < 2){
                System.out.println("请传入2个数字参数");
                return;
            }
            double num1 = Double.valueOf(args[0]);
            double num2 = Double.valueOf(args[1]);
            // 浮点数计算建议格式化输出规避精度问题
            System.out.printf("%.3f%n", num1 + num2);
        }catch(NumberFormatException e){
            System.out.println("参数格式错误,请传入合法数字");
            e.printStackTrace();
        }
    }
}

重新编译执行的命令如下:

javac testforfun.java
java testforfun 34.678 46.322

执行后会正常输出结果81.000,不会抛出异常。

内容的提问来源于stack exchange,提问作者FAIZ ALAM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:45:47