티스토리 뷰

(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);
 }

}


# 소스 코드

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);
  
  
  System.out.println(val1.hashCode());
  //366712642 출력
  System.out.println(val2.hashCode());
  //1829164700 출력
  
  //val1 과 val2는 같은 객체인가? --> 다르다

 System.out.println("=== 연산자 비교 ===");
  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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
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 31
글 보관함