compareTo() vs. equals()

2022-08-31 08:35:28

在 Java 中测试 的相等性时,我一直使用,因为对我来说,这似乎是最自然的方法。毕竟,它的名字已经说明了它打算做什么。但是,我的一位同事最近告诉我,我被教导使用而不是.这对我来说感觉不自然(因为是为了提供排序而不是比较平等),甚至有点危险(因为并不一定意味着在所有情况下都是平等的,即使我知道它确实是)。Stringequals()compareTo() == 0equals()compareTo()compareTo() == 0String

他不知道为什么他被教导使用而不是for 's,我也找不到任何理由。这真的是个人品味的问题,还是任何一种方法的真正原因?compareTo()equals()String


答案 1

不同之处在于,在抛出 NullPointerException 时返回 false。因此,即使对于字符串,它们也不总是可以互换的。"foo".equals((String)null)"foo".compareTo((String)null) == 0


答案 2

2个主要区别是:

  1. equals将采用任何对象作为参数,但只会采用字符串。compareTo
  2. equals仅告诉您它们是否相等,但提供有关字符串在字典上如何比较的信息。compareTo

我看了一下 String 类代码,compareTo 和 equals 中的算法看起来基本相同。我相信他的观点只是一个品味问题,我同意你的观点 - 如果你需要知道的是字符串的相等性,而不是哪一个在词典上先出现,那么我会使用。equals