ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA.LANG PACKAGE
    Programming/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
Designed by Tistory.