При тестировании на равенство Stringв Java я всегда использовал, equals()потому что мне это кажется наиболее естественным методом для этого. В конце концов, его название уже говорит о том, для чего он предназначен. Однако мой коллега недавно сказал, что меня научили использовать compareTo() == 0вместо equals(). Это кажется мне неестественным (поскольку compareTo()предназначено для упорядочивания, а не сравнения на равенство) и даже несколько опасным (потому compareTo() == 0что не обязательно подразумевает равенство во всех случаях, хотя я знаю, что это так для String) для меня.
Он не знал, почему его учили использовать compareTo()вместо equals()for String, и я также не мог найти причины, почему. Это действительно вопрос личного вкуса, или есть реальная причина для любого метода?
compareTo() == 0не обязательно подразумевает равенство во всех случаях». Это абсолютно правильно! Это именно то , что фраза « в соответствии с» равными средствами в спецификации API Java, например , в Сравнительной спецификации класса. Например, метод сравнения String совместим с equals, но метод сравнения BigDecimal несовместим с equals.
.equalsIgnoreCase()это самое быстрое сравнение, если оно уместно, иначе.equals()это то, что вы хотите.