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
相关产品推荐
相关产品推荐

