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

使用StringBuilder.reverse()判断回文质数时结果异常问题

问题原因及解决方法

你的问题出在Long类型的对象比较逻辑上:

Java的Long是包装类,JVM会自动缓存-128到127区间内的Long对象。所以用==比较101(在缓存范围内)和它的反转数时,两个对象是同一个实例,==返回true,能正确触发过滤;但131、151、181、191这些超过127的数,反转后会生成新的Long对象,==此时比较的是对象内存地址而非数值大小,结果为false,导致这些回文质数没被过滤。

修复方案

把回文判断的比较方式改成以下两种之一即可:

  1. 用equals()方法比较Long对象的数值:
if (pNum.equals(reverseDigits(pNum))) {
    // 是回文质数,执行过滤逻辑
    return false;
}
  1. 拆箱为基本类型long后用==比较:
if (pNum.longValue() == reverseDigits(pNum).longValue()) {
    // 是回文质数,执行过滤逻辑
    return false;
}

你的reverseDigits函数本身逻辑是正确的,核心问题就出在回文判断的比较方式上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:20:49