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

Kotlin中使用==比较字符串不生效?调试异常求助

字符串比较异常问题排查

问题现象

调试时发现year和prevYear是值不同的字符串,但无论用==还是!=作为比较符,if语句块都会被执行,调试器始终进入该代码块。

相关代码

// 获取上一年
val date = Date() // 当前日期
val format = SimpleDateFormat("yyyy", Locale.US)
val intPrevYear = format.format(date).toInt()-1
val prevYear: String = intPrevYear.toString()

for (entry in _entryList)
{
    val year: String = entry.date.substring(6)
    if (year == prevYear) // 匹配到目标年份
    {
        //entryDao.delete(entry)
        var a = 0
        a += 1
        a += 3
    }
}

可能的原因及解决建议

  • 字符串含不可见字符:比如空格、换行符、制表符等隐藏字符,会导致肉眼看起来值相同但实际比较结果异常。可以通过打印字符串长度、输出字符ASCII码排查,或者直接对字符串做trim处理后再比较:
    if (year.trim() == prevYear.trim())
    
  • 调试器显示缓存:有时候调试器的变量显示可能存在延迟或缓存,实际变量值和显示内容不符。建议在循环内添加日志,输出两个字符串的真实值(用单引号包裹便于识别前后空白):
    println("year: '$year', prevYear: '$prevYear', 长度分别为:${year.length}/${prevYear.length}")
    
  • substring截取逻辑错误:entry.date.substring(6)的截取位置是否匹配entry.date的实际格式?比如如果entry.date是yyyy-MM-dd格式,截取索引6得到的是-dd而非年份;如果是MM/dd/yyyy格式,索引6才是年份起始位。需要先确认entry.date的格式,调整截取逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:13:14