posted by changhozz 2012. 7. 20. 12:54


1)equals 메서드.
내가 알고있던 equals메서드는
객체의 주소를 비교하는 것이아니라, 변수의 값 자체를 비교하는 것으로 알고있었는데,
그것은 String클래스 equals메서드였던것이다.
String클래스의 equals메서드는 Object클래스의 equals메서드를 오버라이딩
했던 것이다. Object클래스의 equals메서드는 객체의 주소를 비교하기 때문에
내가 알던 결과와는 반대가 나오게 된다.
따라서 equals메서드를 상황에 맞게 오버라이딩을 하는데 주의해야될것같다.

2)hashCode메서드
이 메서드는 각 인스턴스의 같고다름을 비교하기 위한 인스턴스 구별 값인
해시코드를 반환한다. 해시코드는 인스턴스의 주소와 관련된 정수값(int)으로 서로 다른
인스턴스는 서로 다른 해시코드값을 가질 것을 보장한다.
그래서 서로 다른 두 인스턴스가 같은 해시코드값을 갖는 경우는 없다.

 

3)toString메서드
원래의 toString메서드(Object클래스의 toString메서드)는 클래스의 이름과 해시코드를 출력하는
메서드이다.그래서 이것을 String클래스와 Date클래스에서 오버라이딩 한것이다.
String클래스의 toString()은 String인스턴스가 갖고 있는 문자열을 반환하도록 오버라이딩되어 있고,
Date클래스의 경우, Date인스턴스가 갖고 있는 날짜와 시간을 문자열로 하여 반환하도록
오버라이딩되어 있다.
이처럼 toString()은 일반적으로 인스턴스나 클래스에 대한 정보 또는 인스턴스 변수들의 값을 문자열로
변환하여 반환하도록 오버라이딩된다.

따라서 내가 쓰던(알던) toString메서드는 String형에서 접근하였기 때문에
문자열을 반환했던것이다. 때문에 다른 Class에서 toString메서드를 사용하려면
Object클래스의 toString메서드가 호출되어 클래스명과 해시코드를 알려주게될거다.
그래서 따로 오버라이딩을 하여 써야되는것이다.

 
String a = "김창호"; String b = "짱";

System.out.println(a+b);      ㅡ> 결과 : 김창호짱

여기서 a.toString() + b.toString() 인데 생략된것뿐.

 

char a ='김'; char b ='형';

 System.out.println(a+b);      ㅡ> 결과 : langpackage.toStringTest@de6ced

이처럼 String형은 toString()을 자동 호출하여 글씨를 이어주는 것이고,

char형은 Object클래스의 toString()을 불러오기때문에 해시코드가 나오는 것이다.

 

 


 

 

'JAVA > JAVA 공부' 카테고리의 다른 글

StringBuffer클래스  (0) 2012.07.20
String클래스의 특징  (0) 2012.07.20
참조변수의 대한 설명  (0) 2012.06.29
수치형 범위  (0) 2012.06.26
JVM의 메모리 구조  (0) 2012.06.21