使用StringBuilder.reverse()判断回文质数时结果异常问题
问题原因及解决方法
你的问题出在Long类型的对象比较逻辑上:
Java的Long是包装类,JVM会自动缓存-128到127区间内的Long对象。所以用==比较101(在缓存范围内)和它的反转数时,两个对象是同一个实例,==返回true,能正确触发过滤;但131、151、181、191这些超过127的数,反转后会生成新的Long对象,==此时比较的是对象内存地址而非数值大小,结果为false,导致这些回文质数没被过滤。
修复方案
把回文判断的比较方式改成以下两种之一即可:
- 用
equals()方法比较Long对象的数值:
if (pNum.equals(reverseDigits(pNum))) { // 是回文质数,执行过滤逻辑 return false; }
- 拆箱为基本类型
long后用==比较:
if (pNum.longValue() == reverseDigits(pNum).longValue()) { // 是回文质数,执行过滤逻辑 return false; }
你的reverseDigits函数本身逻辑是正确的,核心问题就出在回文判断的比较方式上。
内容的提问来源于stack exchange,提问作者BJagger
相关产品推荐
相关产品推荐

