2013-07-31 2 views
0

나는 equals()가 객체의 값을 비교하는 반면, ==는 참조 (즉, 변수가 가리키는 메모리 위치)를 비교한다. What is the difference between == vs equals() in Java?
.equals()와 ==의 차이점은 무엇입니까?

을하지만, 다음의 코드 조각을 준수하십시오 : 여기를 참조하십시오

package main; 

public class Playground { 

    public static void main(String[] args) { 
     Vertex v1 = new Vertex(1); 
     Vertex v2 = new Vertex(1); 

     if(v1==v2){ 
      System.out.println("1"); 
     } 
     if(v1.equals(v2)){ 
      System.out.println("2"); 
     } 
    } 
} 

class Vertex{ 
    public int id; 

    public Vertex(int id){ 
     this.id = id; 
    } 
} 

출력 :
(아무것도)는 2

를 인쇄 할 수 없습니다 하는가?

+2

당신은 아마 또 다른 질문의 중복으로 폐쇄하지 않을 제목을 선택해야합니다

public boolean equals(Object obj) { return (this == obj); } 

재정의 된 버전은 다음과 같이 될 것이다. –

+0

질문이 있습니다. 어떻게 해시 맵이 객체를 검색합니까? 내가 id = 5 인 정점이 있다고 가정 해 보겠습니다. id = 5 인 새 정점을 만들어 해시 맵의 get 메서드에 전달할 수 있습니까? – user2316667

+0

@ user2316667 처음 ** ** 그것에 대해 읽고 ** ** ** 시험하면 좋을 것입니다. 그렇다면 당신은 당신의 대답을 얻을 것입니다. –

답변

6

Vertex 클래스의 경우 사용자 고유의 .equals() 메서드를 구현해야합니다.

기본적으로 Object.equals 방법을 사용하고 있습니다. From the docs, this is what it does:

Object 클래스에 대한 방법은 개체에 대한 까다로운 수 동치 관계를 구현 같다; 즉 null이 아닌 참조 값 x 및 y에 대해 x 및 y가 동일한 객체를 참조하는 경우에만이 메소드가 true를 반환합니다 (x == y는 true 값을 가짐).

당신은 같은 것을 할 수 있습니다

@Override 
public boolean equals(Object obj) { 
    if (obj == null) return false; 
    if (obj.getClass() != getClass()) return false; 
    Vertex other = (Vertex)obj; 
    return (this.id == other.id); 
} 
+0

그리고 가능한 'hashCode' 가능합니다. – Mena

+0

많이 봅시다! – user2316667

+2

'if (obj.getClass()! = getClass())''(if (obj instanceof Vertex))'를 사용하는 것보다 훨씬 낫습니다. –

3

당신은 equals()의 기본 구현을 재정의해야합니다. 기본 구현은 Object#equals()입니다 :

@Override 
public boolean equals(Object obj) 
{ 
    if(obj == this) return true; 
    if(obj == null) return false; 
    if(obj.getClass() != getClass()) return false; 
    return ((Vertex) obj).id == this.id; 
} 
+0

OP가'돌아오고 싶습니다. this.id == id;' –

+0

@GrijeshChauhan OP에서 '인쇄하지 않아야할까요?'라고 말했습니다. –

+0

'obj.id = this.id'는'obj.id == this.id'와 동일하지 않습니다 –

관련 문제