카테고리 없음

[자바] Java API에서 "같음"이라는 단어는 무엇을 의미합니까?

행복을전해요 2021. 1. 21. 04:29

equals ()와 ==의 차이점을 이해하는 것은 분명합니다 . 따라서 귀하의 질문은 다소 철학적입니다. :)

일반적으로 많은 API는 equals ()의 의미에서 "equals to"를 사용하고 ==의 의미에서 "is the same as"를 사용합니다. 예를 들어 JUnit에는 assertion 메소드 assertEquals()assertSame().

그러나 상식을 사용하고 문서의 언어를 분석하십시오. API에서 인용 된 문장에서 무기한 기사의 사용법에 주목하십시오.

"이 ObjectExpression가 동일한 경우도 마찬가지 새로운 BooleanExpression 작성 상수 값."

" 상수 값"은 명확 수단 어떤 일정한 값뿐만 아니라 동일한 값 값. 따라서 이것이 . "constant"constant.equals(stringExpression)

그러니 이런 식으로 그것을 취하십시오 : 문서가 " 같다 " 라고 말할 때 , 그것이 참조가 아니라 변수 내용관련된 것으로 취하십시오 . 그러나 상식을 사용하고 문장 전체를 읽으십시오 :)

귀하의 질문에 대한 답변이 있습니까? :피

-------------------

항상 a.equals (b)가 참으로 평가된다는 것을 의미합니까, 아니면 때때로 a == b가 참임을 의미합니까? API가 'equals'라고 말하면 항상 .equal을 적용하는 가장 합리적인 방법을 참조합니까 아니면 때때로 ==를 적용하는 유사한 방법을 참조합니까? "

equals()메서드 를 재정의 하는 것입니다. Java에서는 +=연산자 오버로드되고 다른 연산자는 오버로드 될 수 없으며 재정의 할 수 없습니다.==

-------------------

"equal"이라는 용어를 사용할 때 API-doc를 작성할 때 이는 일반적으로 " equals()-method 측면에서 동일"을 의미해야합니다 . 실제로 문서 작성자의 완전성에 따라 다르지만 공식 API 문서에서는 항상이 의미를 갖는 것으로 간주합니다.

귀하의 질문에 대해 "또한 의미 ==할 수 있습니까 ": Object's equals()-method가 참조 ID를 확인 하는 방식으로 , 즉을 사용하여 확인합니다 ==.

-------------------

사용 .equals하면 값을 비교합니다. 사용 ==하면 참조를 비교하고 값이 동일하더라도 동일 할 필요는 없습니다.

자세한 설명은 다음 웹 사이트를 참조하십시오. http://www.javabeat.net/what-is-difference-between-equals-and/

그의 예의 일부를 복사했습니다.

s1 = new String("abc");
s2 = new String("abc");

이제 equals()방법을 사용하여 동등성을 확인하면

if(s1.equals(s2))
     System.out.println("s1.equals(s2) is TRUE");
     else
          System.out.println("s1.equals(s2) is FALSE");
          

내용이 같은지 확인 TRUE하는 equals()방법 으로 출력을 얻을 수 있습니다. ==연산자를 확인 해보자 ..

if(s1==s2)
     System.out.printlln("s1==s2 is TRUE");
        else
             System.out.println("s1==s2 is FALSE");
             

이제 s1과 s2가 둘 다 동일한 문자열 내용을 공유하더라도 두 개의 다른 객체를 가리 키기 때문에 FALSE를 출력으로 얻을 수 있습니다. new String()새 개체가 생성 될 때마다 때문입니다 .

-------------------

어떤 사람이 자바 클래스를 만들 boolean equals(Object o)때 다른 클래스를 확장하지 않을 때 모든 사용자 정의 클래스가 class Object암시 적 으로 확장되기 때문에 'Object'클래스에서 메서드를 상속 합니다.

new연산자를 사용하여이 클래스를 인스턴스화 하면이 밑줄 수식을 사용하여이 개체의 동일성을 얻을 수 있습니다.

    return (this == obj);

따라서 두 객체가 힙에서 동일한 객체를 참조하는 경우에만 true를 반환합니다. 즉 (a == b) = true

    class Abc{}
    Abc a = new Abc();
        Abc b = a;
            a==b //(true)
                a.equals(b) //(true)
                

그리고 그것들이 같은 클래스의 인스턴스이지만 두 개의 다른 객체라고 가정합니다.

   class Abc{}
   Abc a = new Abc();
      Abc b = new Abc();
         a==b; //(false)
            a.equals(b); //(false)
            

그러나 생성 된 클래스가이 equals 메서드를 재정의하면이 동등성은 재정의하는 동안 제공된 새 수식을 사용하여 평가됩니다. 예를 들어 java.util.Date에 의한 .equals 객체 재정의

    public boolean equals(Object obj) {
            return obj instanceof Date && getTime() == ((Date) obj).getTime();
                 }
                 

두 Date 객체 만 getTime () 메서드에서 반환 한 값이 같으면 true를 반환합니다.

도움이 되었기를 바랍니다. 의심스러운 경우 추가 질문을 자유롭게하십시오.



출처
https://stackoverflow.com/questions/22008890