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

Number类doubleValue方法抛出StackOverflowError异常求助

解决Rational类的StackOverflowError问题

看起来你遇到的是无限递归导致的栈溢出错误,错误栈反复指向Rational.doubleValue(Rational.java:62),说明这个方法一直在自己调用自己,把Java虚拟机的方法栈给撑爆了。

问题根源分析

Java的StackOverflowError几乎都是因为无限递归调用引发的:每当调用一个方法,JVM都会在栈里为它分配一块内存空间,如果方法一直调用自己(不管是直接还是间接),栈空间会被快速耗尽,最终抛出这个错误。你的错误日志里重复出现同一个方法的调用记录,完全符合这个特征。

具体修复步骤

  1. 打开你的Rational.java文件,定位到第62行的doubleValue()方法。
  2. 检查方法内部的逻辑:
    • 是不是直接写了return doubleValue();这种调用自身的代码?
    • 是不是调用了其他方法,而那个方法又反过来调用了doubleValue()?
  3. 替换成正确的实现:doubleValue()的核心是返回有理数的浮点值,直接计算分子除以分母即可,比如:
    @Override
    public double doubleValue() {
        // 注意:如果denom可能为0,这里需要额外处理,避免ArithmeticException
        return (double) num / denom;
    }
    

额外提醒

因为你继承了Number类,记得也要正确实现其他抽象方法(比如intValue()、longValue()等),但这次的问题完全集中在doubleValue()的无限递归上,先修复这个就能解决当前的栈溢出问题。

内容的提问来源于stack exchange,提问作者Jerry Scirica

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:32:37