일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 생활코딩
- pyqt
- 반복문
- 자바
- 자바문제
- servlet
- API
- 컬렉션프레임워크
- Oracle
- Java
- 대덕인재개발원
- Error
- spring
- crud
- 맥
- 이클립스
- nodejs
- html
- Mac
- 배열
- ddit
- 객체지향
- JDBC
- jsp
- python
- FastAPI
- ibatis
- 단축키
- Android
- Homebrew
Archives
- Today
- Total
romworld
Equals, HashCode 본문
package kr.or.ddit.basic;
import java.util.HashSet;
public class EqualsHashCodeTest {
public static void main(String[] args) {
Person p1 = new Person();
p1.setNum(1);
p1.setName("홍길동");
Person p2 = new Person();
// p2.setNum(2);
// p2.setName("이순신");
p2.setNum(1);
p2.setName("홍길동");
Person p3 = p1;
System.out.println(p1 == p2); // false 주소값 비교
System.out.println(p1.equals(p2)); // false object에는 equals가 만들어져 있는데
// 기본적으로 참조값을 비교하기 위해 만들어짐
// 즉 equals를 쓰고 싶으면 Person 클래스에서 equals를 재정의를 해주면 됨
// -----------------------------------------------
HashSet<Person> testSet = new HashSet<Person>();
testSet.add(p1);
testSet.add(p2);
System.out.println("set의 크기 : " + testSet.size());
System.out.println();
System.out.println("p1 : " + p1.hashCode()); // 해쉬코드는 다른 객체와 구별하기 위해 .. 참조값을 활용해서 해시코드를 만듬
System.out.println("p2 : " + p2.hashCode()); // equals와 hash코드는 서로 연관이 있다
System.out.println("p3 : " + p3.hashCode());
/*
* - equals()메서드 ==> 두 객체의 내용이 같은지 검사하는 메서드 - hashCode()메서드 ==> 두 객체의 동일성을 검사하는
* 메서드
*
* - HashSet, Hashtable, HashMap과 같이 Hash로 시작하는 컬렉션 객체들은 객체의 의미상의 동일성을 비교하기 위해서
* hashCode()메서드를 호출하여 비교한다. 그러므로 객체가 같은지 여부를 결정하려면 hashCode()메서드를 재정의 해야 한다.
* 단순이 값만 비교할 때는 equals만 써도 된다 결과가 true가 나오고 싶을 때.. hashCode 를 쓰는 이유는 데이터 값과
* 참조값이 다를 경우에 완전히 두 객체를 같게 하고 싶을 때
*/
}
}
class Person { // extends Object가 생략되어있는 것 .. 기본적으로 상속 받고 있으므로
private int num;
private String name;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/*
* @Override public boolean equals(Object obj) { if(this==obj) { // 참조값이 같냐고
* 물어보는 것 return true; } if(obj == null) { return false; } if(this.getClass()!=
* obj.getClass()) { // 같은 유형의 클래스인지 여부 검사 return false; //getClass() : 클래스의 정보를
* 읽어오는 것 }
*
* Person that = (Person)obj; // 인수값으로 받은 객체를 현재 객체 유형으로 형변환한다.
*
* if(this.name==null && that.name!=null) { return false; }
*
* if(this.num == that.num && this.name == that.name) { return true; }
* if(this.num==that.num && this.name.equals(that.name)) { return true; } return
* false; }
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + num;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (num != other.num)
return false;
return true;
}
}
'JAVA > 개념정리' 카테고리의 다른 글
Properties (0) | 2022.10.28 |
---|---|
Map , Set (0) | 2022.10.28 |
ArrayList (0) | 2022.10.28 |
정렬(Comparable, Comparator) (0) | 2022.10.28 |
JDBC (DB와 연결) (0) | 2022.10.10 |
Comments