일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- lang package
- try&catch
- JSP
- jvm
- OOP
- java
- 객체지향
- bubble-sort
- 객체
- 디렉티브
- 클래스 패스
- 백준 알고리즘
- 연결된 예외
- 자동 형변환
- 알고리즘
- 공개키 암호
- 백준
- HTML
- 현대암호
- LANG
- 소수판정
- BufferedWrite
- 자료구조
- 암호론
- class
- 형변환 연산자
- 재귀호출기본
- 예외처리
- 프로그래밍
- 2884
- Today
- Total
코드일기장
[Java] Object클래스의 메서드- equals() 본문
java.lang 패키지는 자바 프로그래밍에 가장 기본이 되는 클래스들을 포함한 패키지이다.
그래서 import문 없이도 사용할 수 있다. 예를 들어 System클래스, String클래스는 우리가 import문으로 선언을 안 해도 사용할 수 있다.
Object클래스
object클래스는 모든 클래스의 최고 조상이다. 그래서 object의 맴버들은 모든 클래스에서 바로 사용할 수 있다.
object클래스의 메서드
Object클래스의 메서드 | 설 명 |
protected Object clone() | 객체 자신의 복사본을 반환한다. |
public boolean equals (Object obj) | 객체 자신과 객체 obj가 같은 객체인지 알려준다. (같으면 true) |
protected void finalize() | 객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출된다. 이 때 수행되어야하는 코드가 있을 때 오버라이딩한다. |
public Class getClass() | 객체 자신 클래스 정보를 담고 있는 Class인스턴스를 반환한다. |
public int hashCode() | 객체 자신의 해시코드를 반환한다. |
public String toString() | 객체 자신의 정보를 문자열로 반환한다. |
public void notify() | 객체 자신을 사용하려고 기다리는 쓰레드를 하나만 깨운다. |
public void notifyAll() | 객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨운다. |
public void wait() public void wait(long timeout) public void wait (long timeout, int nanos) |
다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한히 또는 지정된 시간동안 기다리게 한다. |
Object 클래스의 맴버변수는 존재하지 않는다. 11개의 메서드만 존재한다.
equals()
Object 클래스의 메서드중 하나인 equlas메서드는 객체 주소가 같은지 비교하는 메서드로 같을 시 true, 다를 시 false를 반환한다.
public class Main {
public static void main(String[] args) {
Ob o1 = new Ob(50);
Ob o2 = new Ob(50);
if (o1.equals(o2)) {
System.out.println("두 객체는 같습니다.");
} else {
System.out.println("두객체는 다릅니다.");
}
}
}
class Ob {
long value;
Ob(long value) {
this.value = value;
}
}
두객체는 다릅니다.
실행결과
위 코드를 보면 o1과 o2의 value값은 같다. 하지만 equals메서드는 객체 주소 값을 비교하기 때문에 false를 반환한다.
Ob o1 = new Ob(50);
Ob o2;
o2=o1;
if (o1.equals(o2)) {
System.out.println("두 객체는 같습니다.");
} else {
System.out.println("두객체는 다릅니다.");
}
두 객체는 같습니다.
o1과 o2처럼 객체주소만 같다면 equals 메서드는 true를 반환한다.
Object 클래스의 equals메서드는 결국 두 개의 참조 변수가 같은 객체를 참조하고 있는지를 비교하는 메서드이다. 즉, 객체 주소 값이 같은지 다른지만 비교하는 메서드인 것이다.
하지만, 인스턴스가 가지고 있는 값도 비교를 할 수 있다. equals메서드를 오버라이딩하여 주소가 아닌 객체에 저장된 내용을 비교할 수 도 있다.
public class Main {
public static void main(String[] args) {
Ob o1 = new Ob(50L);
Ob o2 = new Ob(50L);
o2 = o1;
if (o1.equals(o2)) {
System.out.println("두 객체의 값은 같습니다.");
} else {
System.out.println("두객체의 값은 다릅니다.");
}
}
}
class Ob {
long value;
public boolean equals(Object obj) {
if (obj instanceof Ob) {
return value == ((Ob) obj).value; // obj가 Object타입이므로 id참조하기 위한 형변환
} else {
return false;
}
}
Ob(long value) {
this.value = value;
}
}
두 객체의 값은 같습니다.
실행결과
위 처럼 public boolean equals(Object obj) 메서드를 오버라이딩하여 내용을 바꿀 수도 있다.
위 코드는 객체의 주소값이 아닌 멤버 변수 value의 값을 비교하도록 오버라이딩 한 것이다.
'Java' 카테고리의 다른 글
[Java] String 클래스 (0) | 2022.02.05 |
---|---|
[Java] hashCode(), toString() (0) | 2022.02.04 |
[Java] 연결된 예외 (예외처리1-6) (0) | 2022.01.23 |
[Java] 사용자 정의 예외, 예외 되던지기 (예외처리 1-5) (0) | 2022.01.16 |
[Java] 메서드에 예외 선언, finally 블럭 (예외처리 1-4) (0) | 2022.01.12 |