자바기초(equal 클래스)

bitna's study note·2022년 5월 4일
0

자바

목록 보기
64/119

5월4일 내용정리

1.equals():
object클래스의 equals()메서드는 비교연산자인 ==와 동일한 리턴
재정의해서 내용이 같은지 비교한 후 리턴하도록 설정
동일한 주소값을 가지고 있는가? 를 원래 묻는다.
우리는 이것을 내용이 같은가?! 를 재정의해서 쓴다.

2.equals는 원래 주소가 같은지 물어 보는 메서드이다
그래서 사용시 equals는 재정의해줘야한다.
String 은 이미 재정의 클래스이기 때문에 equals의 재정의 없이 사용시 문제가 없었던이유임.

3.public boolean equals(Object obj) 와 public boolean equals(Circle c) 의 차이
object 클래스 객체를 받을때는 조상클래스를 끌어다 쓰는 개념으로 끌어다가 오버라이딩 해주고 싶을때나 넓은의미로 모든객체주소를 받아 참조변수obj 넣어줌
equals(Circle c) 와같이 Circle주소를 받을때는 이미오버라이딩 된객체나 또는 Circle객체주소로 한정짓고 싶을때 객체를 지정하여 주소를 받음.

package study_0502;

public class StringExam {
	
	
	public class Member{
		public String id;
		
		public Member(String id) {
			this.id=id;
		}
		
	
	}
	

	public static void main(String[] args) {
		
		//n1==n2는 주소가 같으냐?? true
		//n1.equals(n2) 내용이 같으냐?? true
		String n1="홍길동";
		String n2="홍길동";
		
		//n1==n3는 주소가 같으냐??false
		//n1.equals(n3) 내용이 같으냐?? true
		String n3=new String("홍길동");
//==========================================================================
		
		
		StringExam s1= new StringExam ();
		
		StringExam.Member obj1= s1.new Member("blue");
		StringExam.Member obj2= s1.new Member("blue");
		StringExam.Member obj3= s1.new Member("green");
		
		
		if(obj1.equals(obj2)) {
			System.out.println("같음");
		}else {
			System.out.println("다름");
		}
		
		
		if(obj1.equals(obj3)) {
			System.out.println("같음");
		}else {
			System.out.println("다름");
		}

	}
	
}

4.hashCode():객체 해시코드를 반환하는 메서드
object클래스의 hashCode()메서드는 객체의 주소를 int 로 변환해서 반환
object클래스의 hashCode()메서드는 객체의 메모리번지를 이용하여 만든다.
메모리 번지는 객체마다 다른값을 가짐

5.hashCode()를 재정의하는 경우는 두 객체가 같은지(동등한지) 비교할때 필요
equals()메서드를 재정의하면 반드시 hashCode()메서드도 재정의해야한다.
equals()메서드의 결과가 true인 두 객체의 해시코드는 같아야 한다.
-hashCode()리턴값 ---같음--->equals()리턴값---같음--->같은객체
-hashCode()리턴값 ---다름--->equals()리턴값---같음--->다른객체
-hashCode()리턴값 ---같음--->equals()리턴값---다름--->다른객체
왜equals를 재정의하면 hashCode도 같이 재정의해야하나?
equals는 내용이 같은지를 확인하는거고 hashCode는 주소가 같은지를 확인하는거기 때문에
equals 와 hashCode를 객체를 비교시에는 재정의해야한다.

package study_0502;

public class hashExam {
	
	public static void main(String[] args) {
		
		
		
		String str1 =new String("abc");
		String str2 =new String("abc");
		
		//hashCode() 는 재정의 객체를 생성시 내용이 같으면 hashCode()를 동일하게 부여 
		System.out.println(str1.equals(str2)); //내용이 같음을 확인
		System.out.println(str1.hashCode()); //해시코드가 동일하게 부여
		System.out.println(str2.hashCode()); //해시코드가 동일하게 부여
		
		//객체마다 원래 가지고 있는 해시코드
		System.out.println(System.identityHashCode(str1)); 
		System.out.println(System.identityHashCode(str2));
		
		
	}

}
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글

관련 채용 정보