-
JAVA.LANG PACKAGEProgramming/JAVA 2020. 7. 7. 23:23
equals()
equals test
Value(int Value){ this.Value = Value; } } public class EqualsEx1 { public static void main(String[] args) { Value v1 = new Value(10); Value v2 = new Value(10); if(v1.equals(v2)) { System.out.println("v1과 v2는 같습니다."); } else { System.out.println("v1과 v2는 다릅니다."); } }//메인 }//java.lang.package equals test.
equals test (overriding)
class Person{ long id; public boolean equals(Object obj) { if (obj instanceof Person) { return id == ((Person)obj).id; //obj가 object타입이므로 id값을 참조하기 위해서는 Person타입으로 형변환이 필요하다. } else { return false; } } Person(long id){ this.id=id; } } public class EqualsEx2 { public static void main(String[] args) { // TODO Auto-generated method stub Person p1 = new Person(8011081111222L); Person p2 = new Person(8011081111222L); if(p1==p2) System.out.println("p1과 p2는 같은 사람 입니다."); else System.out.println("p1과 p2는 다른 사람 입니다."); if(p1.equals(p2)) System.out.println("p1과 p2는 같은 사람 입니다."); else System.out.println("p1과 p2는 다른 사람 입니다."); } }
오버라이딩을 한 것과 안한 것의 차이는 그냥 단순 변수로만 비교되었을 때는 서로의 주솟값을 비교한다.
하지만 equals 를 오버라이딩해서 확인 한 결과 equals의 메서드는 서로 그 주소값이 아닌 내부값을 직접 비교한다.
hashcode()다량의 데이터를 저장하고 검색하는 데 유용하다. 찾고자하는 값을 입력하면 그 데이터가 저장된 위치를 알려주는 해시코드를 반환한다.
hashcode를 오버라이딩 하지 않는다면 모든 객체가 서로다른 해시코드값을 가질 것이므로, 같은 객체라면 적절하게 오버라이딩해서 같은 객체가 서로 같은 값을 가질 수 있도록 오버라이딩한다.
public class HashCode1 { public static void main(String[] args) { // TODO Auto-generated method stub String str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1.equals(str2));//print equals messages System.out.println(str1.hashCode()); System.out.println(str2.hashCode()); //equals를 적절하게 오버라이딩해서 같은 객체의 문자열이 같을 경우 같은 해시값을 도출한다. System.out.println(System.identityHashCode(str1)); System.out.println(System.identityHashCode(str2)); //반면 object class 에서 identityHashCode는 서로 다른 주솟값에 대해 해시코드를 도출한다. } }
equals를 적절하게 오버라이딩 한 equals , hashcode는 객체의 문자열이 같을 경우 같은 해시값을 도출하며
반면에 object class 에서 identityHashCode는 서로 다른 주솟값에 대해 해시코드를 생성한다.
tostring()
class Card{ int number; String kind; Card(){ this("SPADE",1); } Card(String kind, int number){ this.kind=kind; this.number=number; } } public class CardToString { public static void main(String[] args) { Card c1 = new Card(); Card c2 = new Card(); System.out.println(c1.toString()); System.out.println(c2.toString()); } /*public string tostring(){ * return getclass().getname()+"@"+Integer.tohexstring(hashcode()); * { * 이런 식으로 되어있어서 저 문자를 출력시 Card@hashcode 이런식으로 서로다른 값을 띈다. * 클래스 네임은 같아도 다른 객체인 것을 확인하는 문제. * 객체 자체의 string 문자열이 있어야 그것을 문자열로 반환한다. */ }
public string tostring(){
*return getclass().getname()+"@"+Integer.tohexstring(hashcode());
{
* 이런 식으로 되어있어서 저 문자를 출력시 Card@hashcode 이런식으로 서로다른 값을 띈다.
* 클래스 네임은 같아도 다른 객체인 것을 확인하는 문제.
* 객체 자체의 string 문자열이 있어야 그것을 문자열로 반환한다.오버라이딩 후
class Card { int number; String kind; Card(){ this("SPADE",1); } Card(String kind, int number){ this.kind=kind; this.number=number; } public String toString() { return "kind : "+kind+",number : "+number; //card인스턴스 kind와 number를 문자열로 반환한다. 적절한 오버라이딩 } } public class CardToString2 { public static void main(String[] args) { Card c1 = new Card(); Card c2 = new Card("HEART",10); System.out.println(c1.toString()); System.out.println(c2.toString()); } /* * 1번을 오버라이딩 한 코드. */ }
'Programming > JAVA' 카테고리의 다른 글
[JAVA FX] 간단한 계산기 만들기 (0) 2020.11.26 [JAVA FX] Button 컨트롤 (0) 2020.11.04 inner class (0) 2020.06.28 abstract include interface(2) (0) 2020.06.28 abstract include interface (0) 2020.06.27