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

为何System.out.println("0:00".compareTo("0"));执行结果为3?

为什么"0:00".compareTo("0")返回3而不是10?

嘿,这个问题我刚接触Java字符串比较时也懵过!你误解了String.compareTo()的工作逻辑啦,它不是你想的那样会强行找不同字符算ASCII差值,实际规则是这样的:

  • 首先逐字符按顺序对比两个字符串的对应位置,直到碰到第一个不相等的字符,或者其中一个字符串先遍历完。
  • 如果遇到不相等的字符,才会返回这两个字符的ASCII码差值(前者减后者);但如果其中一个字符串是另一个的前缀(就像你的例子里,"0"是"0:00"的前缀),这时候直接返回两个字符串的长度差(前者长度减后者长度)。

回到你的例子:

  • "0:00"的长度是4,"0"的长度是1。
  • 第一个字符都是'0',完全相等;接着"0"已经没有下一个字符了,所以直接返回4-1=3,根本不会去比较第二个字符':'和不存在的字符哦!

如果想验证你最初的ASCII差值逻辑,可以试试这段代码:

System.out.println("0:00".compareTo("0a"));

这时候两个字符串前1个字符相等,第二个字符分别是':'(ASCII 58)和'a'(ASCII 97),结果就会是58-97=-39,这才是你预期的那种字符差值场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:42:07