"=="과 "equals()"의 차이점 탐색

4712 단어
본고는 전체적인 초등학생 창작 기법으로'=='과'equals()'의 차이점을 비교적 깊이 있게 탐구했다.

개괄하다

  • 용도: equals()와'=='조작은 대상의 비교에 사용되며 두 대상의 상등성을 검사한다.
  • 성질: 전자는 방법이고 후자는 조작부호이다.
  • 차이점:
  • == 두 변수나 실례가 같은 메모리 공간을 가리키는지 판단하는 것이다. equals()는 두 변수나 실례가 가리키는 메모리 공간의 값이 같은지 판단하는 것이다
  • ==메모리 주소 비교equals()는 문자열의 내용 비교
  • =인용이 동일한지 equals()는 값이 동일한지 여부를 가리킨다
  • 통속적으로 말하면 어떻게 차이를 기억합니까?(엄격하지 않은 표현)==: 같다.equals: 동일합니다.

  • "=="은 무엇입니까?

  • 뭐예요?"=="또는 등호 작업은 자바 프로그래밍 언어에서 원생 유형과 대상을 비교하는 데 사용되는 이원 조작부호이다.원생 유형인 boolean, int,float에 대해 말하자면'=='을 사용하여 둘을 비교하면 이것은 잘 파악할 수 있다. 예를 들어 1=1이다.그러나 대상을 비교할 때 이퀄스()와 곤혹스러울 수 있다.
  • 원리: "=="은 두 대상을 메모리 인용에 기초하여 비교한다. 만약 두 대상의 인용이 완전히 같다면(같은 대상을 가리킨다) "=="작업은true를 되돌려주고 그렇지 않으면false를 되돌려준다.
  • 프로그래밍 예:class AnotherClass {
     }
     public class EqualsTest {
         public static void main(String[] args) {
             // :int、float、double、boolean、char  
             char ch1 = 'a';
             char ch2 = 'a';
             System.out.println("char :" + (ch1==ch2));
             
             int i1 = 100;
             int i2 = 100;
             System.out.println("int :" + (i1==i2));
             
             // 
             String str1 = new String("liaoshaoshao");
             String str2 = new String("liaoshaoshao");
             String str3 = str2;
             System.out.println(" new :" + (str1==str2));
             System.out.println(" :" + (str3==str2));
             
             // 
             AnotherClass ac1 = new AnotherClass();
             AnotherClass ac2 = new AnotherClass();
             AnotherClass ac3 = ac2;
             System.out.println(" new :" + (ac1==ac2));
             System.out.println(" :" + (ac3==ac2));
         }
     }
    
    컨트롤러 출력:char 비교 결과:true int 비교 결과:true 두 new에서 나온 문자열 비교 결과:false 부수에서 나온 문자열 비교 결과:true 두 new에서 나온 대상 비교 결과:false 부수에서 나온 대상 비교 결과:true
  • equals()는 무엇입니까?

  • 뭐예요?equals () 방법은 Object 클래스에 정의되어 있으며 구체적인 업무 논리에 따라 이 방법을 정의하여 두 대상의 상등성을 검사하는 데 사용된다.
  • 실제 용도: 자바 언어의 equals 방법은 사실 개발자에게 복사를 맡기고 개발자 스스로 어떤 조건을 만족시키는 두 개의 Object가 equal인지 정의하도록 한다.
  • 기본적으로 (즉 이 클래스가 기본적으로 Object 클래스를 계승하는 것) equals () 와 ==는 덮어쓰기 (override) 되지 않는 한 같다.Object 클래스에 equals ()가 있기 때문에 코드는 다음과 같습니다:public boolean equals (Object obj) {return (this = = obj);덮어쓰지 않으면 equals()와 ==는 별 차이가 없다는 것을 알 수 있다.
    인용: 공식 API 문서에서 Object 클래스의 equals () 에 대한 설명:public boolean equals (Object obj) 는 다른 대상이 이 대상과 같은지 여부를 표시합니다.equals 방법은 비공식 대상 인용에서 상등한 관계를 실현한다. - 자반성: 비공식 인용 값 x에 대해 x.equals(x)는true로 되돌아와야 한다.대칭성: 비공식 인용값 x와 y에 대해 y.equals(x)가true로 되돌아갈 때만 x.equals(y)가true로 되돌아와야 한다.전달성: 비공식 인용값인 x, y,z에 대해 x.equals(y)가true로 되돌아오고 y.equals(z)가true로 되돌아오면 x.equals(z)는true로 되돌아와야 한다.일치성: 비공식 인용값 x와 y에 대해 x.equals(y)를 여러 번 호출하여true로 되돌려주거나false로 되돌려줍니다. 전제는 대상의 equals 비교에 사용된 정보가 수정되지 않았다는 것입니다. -비공식 인용값 x에 대해 x.equals (null) 는false로 되돌아와야 합니다.Object 클래스의 equals 방법은 대상의 차별 가능성이 가장 큰 상등 관계를 실현한다.즉, 비공식 참조 값 x와 y에 대해 x와 y가 같은 대상을 인용할 때만 이 방법은true(x=y 값true)를 되돌려줍니다.주의: 이 방법이 다시 쓰일 때, 보통 hashCode 방법을 다시 써서,hashCode 방법의 일반적인 협정을 유지할 필요가 있으며, 이 협정은 같은 대상이 똑같은 해시 코드를 가지고 있어야 한다.
  • 이 종류가 equals()를 복제했다고 가정하면 개발자가 원하는 논리에 따라 판단한다.가장 전형적인 예는 바로 String 클래스에 속한다. String 클래스에 equals ()가 복기되어 있는데 원본 코드는 다음과 같다. public boolean equals (Object an Object) {if (this = an Object) {return true;if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == 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; } 개인 정보:
  • 스트링 클래스의 equals () 방법을 호출한 후 먼저 이 두 스트링 클래스의 대상(즉 두 문자열)의 주소가 같은지 비교한다. 만약 같으면 당연히'이quals',true로 되돌아간다.
  • anObject는 전송된 매개 변수로서 우선string류의 대상임을 확인해야 하기 때문에instanceof로 판단한다. 만약string유형도 아니라면 마지막return false만 실행한다.조건이 충족되면 String 유형으로 강제로 변환합니다.
  • value.length는 대상의 문자열 길이입니다.
  • 두 문자열의 길이가 같아야 계속 비교할 수 있고 길이가 같지 않으면false로 되돌아옵니다.
  • 다음은 두 문자열의 문자가 같은지 순서대로 비교하는 것이다. 만약 같지 않은 문자가 나타나면false로 되돌아간다. 비교가 끝날 때까지 서로 다른 문자가 나타나지 않으면true
  • 로 되돌아간다.
  • 결론: 스트링 클래스의 equals 방법은 두 문자열의 내용이 같은지 비교하는 데 사용된다.(물론 주소가 같으면 내용도 틀림없이 같다)

  • 요약:

  • 값 변수(int,float,double,char 등)에 대해'=='로 상등성을 판단한다.
  • String에 대해서는 "=="로 문자열 주소가 같은지, "equals()"로 문자열 내용이 같은지 판단한다.
  • 인용 대상에 대해'=='로 대상의 주소가 같은지 판단하고 equals 방법을 자주 복기하여 개발자 스스로 어떤 조건을 만족시키는 두 개의 Object가 equal인지 정의하도록 한다.

  • 참조 읽기:https://www.zhihu.com/question/26872848
    학생 한 사람으로서 착오를 면하기 어려우니 여러분께서 고쳐 주십시오.

    좋은 웹페이지 즐겨찾기