java String源码equals()方法不明白的地方
PHP中文网
PHP中文网 2017-04-18 09:18:43
0
2
435

直接贴代码吧:

public boolean equals(Object anObject) {
    if(this == anObject) {
        return true ;
    }
    if(anObject instanceof String){
        String anotherString = (String)anObject ;
        int n = value.length ;
//*********************************************************
        if(n == anotherString.value.length){
//*********求解释anotherString.value.length的含义***********
            char v1[]= value ;
            char v2[]= anotherString.value;
            int i=0;
            while(n-- != 0){
                if(v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

对于anotherString.value.length,最初的想法是用anotherString.length(),但是对于源码中的解释,实在没明白value.length的意思
刚开始看这部分,很多不明白的地方,求解释,先谢过啦

PHP中文网
PHP中文网

认证0级讲师

모든 응답(2)
Peter_Zhu

String 클래스는 문자열에 대한 일부 작업을 캡슐화합니다. 실제 문자열은 그 아래의 value 문자 배열에 저장됩니다. String.length()의 내부 구현은 value.length이므로 value을 호출하지 않고 여기서 String.length()의 길이를 직접 사용하므로 메서드 호출의 불필요한 오버헤드도 방지됩니다.

Peter_Zhu

설명

String 클래스는 내부적으로 char[] 배열을 사용하여 문자 연산을 수행합니다.

/* 문자 저장에 사용되는 값입니다. /
비공개 최종 문자 값[];

이 값은 문자열 문자열을 저장하는 데 사용됩니다. 즉, equals 메소드의 현재 문자열 객체 this
: anObject는 비교해야 하는 문자열을 나타내고 value는 현재 문자열 this

입니다.

답변

귀하의 질문에 대해서는 anotherString.value.length의 경우 초기 아이디어는 anotherString.length()를 사용하는 것이었지만 소스 코드의 설명에 따르면 value.length의 의미를 실제로 이해하지 못합니다.
value 자체는 char[] 배열이고 anotherString은 String으로 변환된 String 인스턴스(실제로는 char[] 배열)이기 때문입니다.
따라서 두 char[] 배열의 각 요소를 하나씩 비교하는 것이 equals 방법입니다. . . . .

다음을 참조하세요: http://www.cnblogs.com/meet/p/4696255.html

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!