있는 유일한 방법은,> 0이 오면 (사전 식 순서에 따라) 출력이 < 0이 될 것입니다 다른 String의 뒤에, 0의 경우는 동등합니다. Javadoc의에서
:
INT java.lang.String.compareTo (문자열 anotherString)
는 두 문자열을 사 전적으로 비교합니다. 비교는 문자열의 각 문자의 유니 코드 값을 기반으로합니다. 이 String 오브젝트가 나타내는 캐릭터 순차 순서는, 인수 캐릭터 라인이 나타내는 캐릭터 순차와 사전 식으로 비교됩니다. 이 String 객체가 사 전적으로 인수 문자열 앞에있는 경우 결과는 음수입니다. 이 String 객체가 사 전적으로 인수 문자열 뒤에 오는 경우 결과는 양의 정수입니다. 문자열이 동일하면 결과는 0입니다.; compareTo는 equals (Object) 메서드가 true를 반환 할 때 정확히 0을 반환합니다.
당신은 그 구현 세부 사항이기 때문에, 즉 자바의 향후 버전에서 변경할 수 있습니다, 그 메소드에 의해 반환되는 실제 값에 대한 어떠한 가정도해서는 안됩니다.
Java 8 구현은 c1 - c2
을 반환합니다. 여기서 c1
과 c2
은 서로 비교되지 않는 비교 문자열의 첫 번째 쌍입니다. 비교 된 문자열의 길이는 한 문자열이 다른 문자열의 하위 문자열 일 경우에만 반환 값에 영향을줍니다. 비교 String
의 자신의 첫 번째 문자에 차이가 당신의 예에서
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
, 그래서 str2.compareTo(str3)
는 str2.charAt(0)-str3.charAt(0)
를 반환하고, str3.compareTo(str2)
는 str3.charAt(0)-str2.charAt(0)
를 반환합니다.
무엇 – Ward
* "str2 또는 str3의 크기를 변경하면 반환되는 숫자가 동일합니다"* 반환 값은 문자열의 길이 *와 아무런 관련이 없음 힌트 : 'I'와 Unicode의 'S'는 10 자입니다 (코드 포인트 73 대 코드 포인트 83). 그러나 Eran이 지적한대로 이것에 의존하지 마십시오. –
https://docs.oracle.com/javase/9 /docs/api/java/lang/String.html#compareTo-java.lang.String- – zhh