Java

19 [인강] 자바의정석 ch09

Rosie_dev 2021. 1. 12. 08:23
인강 - 자바의정석 기초편 ch09
Java API

 

Object 클래스


모든 클래스의 조상 

 

 

//notify( ), wait( ) 쓰레드 관련 메서드

//protected 되어 있는 메서드는 오버라이딩을 통해 public으로 변경하여 사용한다

 

equals (Object obj)

 

객체 메모리 주소값을 비교하는 메서드.

주소값이 다르더라도 같은 값을 가지면 true로 나오게 하려면, value 값으로 obj를 변환시켜서 사용한다. 참조변수의 형변환 전에는 instanceof 로 가능여부를 확인해야 한다.

 
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
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는 다릅니다.");        
 
    } // main
 
class Value {
    int value;
 
    Value(int value) {
        this.value = value;
    }
 
    public boolean equals(Object obj) {
 
        if(!(obj instanceof Value)) return false;
 
        Value v = (value)obj;
        return this.value == v.value;
}
cs

 

hashcode( )

 

객체 메모리 주소값을 int로 반환하는 메서드. OS의 메서드를 가져와서 사용( 주로 C언어로 작성되어 있으며, JNI 기술 참고)

equals( )를 오버라이딩 하면, hashcode( )도 오버라이딩 해야 한다. equals( )의 결과가 true인 두 객체의 hashcode( )는 동일해야 하기 때문이다. 

//객체마다 다른 hashcode( ) 값, 주소 값을 도출해야 하는 경우에는 .identityhashCode( )를 사용한다.

//64bit JVM 값이 32bit JVM에서는 주소값이 겹칠 수도 있다. 

 

1
2
3
4
5
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str.equals(str2));
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
cs

 

toString( )

 

객체를 문자열로 변환하기 위한 메서드. 

 

String( ) 클래스

 

문자열 결합에서는 계속 새로운 객체 주소를 생성해 값을 저장하므로 성능이 떨어진다. StringBuffer 클래스를 이용하면 내용 변경이 가능하다.

문자열 비교는 equals( )를 사용한다. 

댓글