티스토리 뷰
(1) 객체 비교
a.equals(b) 같다(true) | 다르다(false)
<Error>
package equalsex;
class Value{
int num;
}
public class EqualsTest {
public static void main(String[] args) {
Value val1 = new Value(10);
Value val2 = new Value(10);
<Error 해결 >
package equalsex;
class Value{
int num;
Value(int n){
num=n;
}
}
public class EqualsTest {
public static void main(String[] args) {
Value val1 = new Value(10);
Value val2 = new Value(10);
}
}
class Value{
int num;
num=n;
}
}
public class EqualsTest {
public static void main(String[] args) {
Value val2 = new Value(10);
System.out.println(val1.hashCode());
//366712642 출력
System.out.println(val2.hashCode());
//1829164700 출력
//val1 과 val2는 같은 객체인가? --> 다르다
if(val1==val2){
// ==(연산자 비교 ) 객체의 hashCode를 기준으로 비교
System.out.println("같은 객체");
}else{
System.out.println("다른 객체");
}
// " 다른객체 " 출력
System.out.println("=== 메서드 비교 #1. ===");
if(val1.equals(val2)){
System.out.println("같은 객체");
}else{
System.out.println("다른 객체");
}
(2) 같은 타입일 때 두 객체를 비교하자
instanceof 연산자 : 타입체크한다!
객체 instanceof 타입
#실습
package equalsex;
class Member{
String id;
int jumin;
//생성자 Contructor
public Member(String id, int jumin) {
this.id = id;
this.jumin = jumin;
}
@Override // equals 재정의
public boolean equals(Object obj) {
// if(obj 타입이 Member일때만 jumin을 불러서 비교 )
// 그렇지 않으면 false를 return
if(obj instanceof Member)
return this.jumin==((Member)obj).jumin;
//obj의 자식은 방대하므로 Member의 형변환사용
(상속타입에서는 언제든지 자식타입으로 형변환가능)
//우선순위 때문에 소괄호로 묶어서 먼저 계산하도록 해야함
return false;
}
}
public class EqualsTest2 {
public static void main(String[] args) {
//#1. 재정의 하기 전의 상황
Member mem1 = new Member("dog",19951010);
Member mem2 = new Member("cat",19951010);
// 주민번호가 같으므로 같은 사람이라고 나와야함
System.out.println(mem1==mem2?"같다":"다르다");
// " 다르다 " 출력
//부모한테 물려받은 equals를 그대로 사용하면 ==와 다르지 않음 --> hashCode 비교
//자식 클래스들은 가지고 있는 변수를 비교해서 동일여부를 판단할 수 있도록 "재정의"해서 사용하게 됨
//#2. 각 클래스는 객체를 비교하기 위해 equals를 재정의 (override)
if(mem1.equals(mem2)){
System.out.println("같은 사람");
}else{
System.out.println("다른 사람");
} // " 같은 사람 " 출력
}
}
5) toString() 과 equals()의 재정의
#실습
package overrideex;
class Person{
String name;
int birth;
String address;
String phone;
String email;
// 이름, 생일, 이메일 (변경불가)
//생성자
public Person(String name, int birth, String address, String phone, String email) {
super();
this.name = name;
this.birth = birth;
this.address = address;
this.phone = phone;
this.email = email;
}
//toString 재정의
@Override
public String toString() {
return "Person [name=" + name + ", birth=" + birth + ", address=" + address + ", phone=" + phone + ", email="
+ email + "]";
}
//equals 재정의
@Override
public boolean equals(Object obj) {
if(obj instanceof Person)
return name == ((Person)obj).name&&
birth ==((Person)obj).birth&&
email==((Person)obj).email;
else
return false;
}
}
public class OverrideTest {
public static void main(String[] args) {
Person p1= new Person("dog", 19961010, "서울시", "010", "naver");
Person p2= new Person("dog", 19961010, "경기도","010","naver");
if(p1.equals(p2)){
System.out.println("같은사람");
}else{
System.out.println("다른 사람");
} // " 같은사람 " 출력
System.out.println(p1.toString());
System.out.println(p2.toString());
System.out.println(p1);
System.out.println(p2);
}
}
#실습
package overrideex;
class Person2{
String name;
int birth;
String address;
String phone;
String email;
// 이름, 생일, 이메일 (변경불가)
//toString 재정의
@Override
public String toString() {
return "Person [name=" + name + ", birth=" + birth + ", address=" + address + ", phone=" + phone + ", email="
+ email + "]";
}
//Alt+Shift+s --> hashCode0 and equals 재정의
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + birth;
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person2 other = (Person2) obj;
if (birth != other.birth)
return false;
if (email == null) {
if (other.email != null)
return false;
} else if (!email.equals(other.email))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
public class OverrideTest2 {
public static void main(String[] args) {
Person2 p2 = new Person2();
System.out.println(p2);
//Person [name=null, birth=0, address=null, phone=null, email=null] 출력
}
}
'Programing > Java' 카테고리의 다른 글
Java2 - 08. 익명 내부 클래스 (anonymous) (0) | 2017.05.18 |
---|---|
Java2 -07. 내부클래스 (inner) (0) | 2017.05.17 |
Java2 - 02. 패키지 Object- toString (0) | 2017.05.11 |
Java2 - 01. 예외처리 (0) | 2017.05.10 |
Java1 - 22. 다형성 (0) | 2017.05.10 |