[java] compareTo () 대 equals ()

StringJava에서의 동등성을 테스트 할 때 나는 equals()이것이 가장 자연스러운 방법 인 것처럼 보이기 때문에 항상 사용 했습니다. 결국 그 이름은 이미 의도 한 바를 말하고 있습니다. 그러나 최근에 동료 compareTo() == 0equals(). 이것은 부자연스럽고 ( compareTo()순서를 제공하고 평등을 비교하지 않기위한 것이므로) 다소 위험하다고 느껴집니다 (왜냐하면 compareTo() == 0모든 경우에 평등을 의미하지는 않기 때문입니다 String).

그가 사용하는 배웠습니다 그는 왜 몰랐 compareTo()대신 equals()String의, 나는 또한 어떤 이유를 찾을 수 없습니다. 이것은 정말로 개인적인 취향의 문제입니까, 아니면 두 방법 모두에 대한 진정한 이유가 있습니까?



답변

차이점은 NullPointerException "foo".equals((String)null)"foo".compareTo((String)null) == 0throw하는 동안 false 를 반환 한다는 것 입니다. 따라서 문자열에서도 항상 교환 할 수있는 것은 아닙니다.


답변

두 가지 주요 차이점은 다음과 같습니다.

  1. equals모든 개체를 매개 변수로 사용하지만 compareTo문자열 만 사용합니다.
  2. equals동일한 지 여부 만 알려주지 만 compareTo문자열이 사 전적으로 비교되는 방법에 대한 정보를 제공합니다.

String 클래스 코드를 살펴 보았고 compareTo 및 equals 내의 알고리즘은 기본적으로 동일하게 보입니다. 나는 그의 의견이 단지 취향의 문제라고 믿고, 나는 당신에게 동의합니다. 만약 당신이 알아야 할 모든 것이 Strings의 평등이고 어떤 것이 어휘 학적으로 먼저 오는 것이 아니라면, 나는 equals.


답변

평등을 비교할 때는 equals()의도를 분명하게 표현하기 때문에 를 사용해야합니다 .

compareTo()Comparable인터페이스 를 구현하는 객체에서만 작동한다는 추가 단점이 있습니다.

이것은 문자열뿐만 아니라 일반적으로 적용됩니다.


답변

compareTo문자열의 길이가 다른 경우 더 많은 작업을 수행합니다. equalsfalse를 반환 compareTo할 수 있지만 정렬 순서를 찾기 위해 항상 충분한 문자를 검사해야합니다.


답변

compareTo()compareTo<T>일반 인수를 취하기 때문에 문자열뿐만 아니라 다른 모든 객체에도 적용됩니다 T. String은 다음을 구현하여 compareTo()메서드를 구현 한 클래스 중 하나입니다 .Comparable 인터페이스를 . (compareTo ()는 유사한 인터페이스를위한 메서드입니다). 따라서 모든 클래스는 Comparable 인터페이스를 자유롭게 구현할 수 있습니다.

그러나compareTo() 일반적으로 오름차순 또는 내림차순으로 객체를 정렬하는 데 사용되는 객체의 순서를 제공하며 equals()평등에 대해서만 이야기하고 동일한 지 여부를 말합니다.


답변

문자열 컨텍스트에서 :
compareTo : 두 문자열을 사 전적으로 비교합니다.
같음 :이 문자열을 지정된 개체와 비교합니다.

compareTo는 두 문자열을 문자 (동일한 인덱스)로 비교하고 그에 따라 정수 (양수 또는 음수)를 반환합니다.

String s1 = "ab";
String s2 = "ab";
String s3 = "qb";
s1.compareTo(s2); // is 0
s1.compareTo(s3); // is -16
s3.compareTo(s1); // is 16


답변

equals ()compareTo () 보다 더 효율적일 수 있습니다 .

compareTo와 equals의 매우 중요한 차이점 :

"myString".compareTo(null);  //Throws java.lang.NullPointerException
"myString".equals(null);     //Returns false

equals () 는 두 객체가 동일한 지 확인하고 부울을 반환합니다.

compareTo () (Comparable 인터페이스에서) 정수를 반환합니다. 두 개체 중 어떤 개체가 다른 개체보다 “작거나”, “같거나” “큰지”확인합니다. 모든 객체를 논리적으로 정렬 할 수있는 것은 아니므로 compareTo () 메서드가 항상 의미가있는 것은 아닙니다.

equals ()는 compareTo ()가하는 객체 사이의 순서를 정의하지 않습니다.

이제 두 방법의 소스 코드를 검토하여 일부 수학 계산이 포함 된 compareTo보다 equals가 더 낫다는 결론을 내리는 것이 좋습니다.