Java에서 ==과 equals는 어떤 차이가 있는가?라고 질문이 온다면 무어라 답변할 수 있을까?
나의 경우에는 자바에서는 문자열에서 값이 같은지를 비교하기 위해선 equals를 써야 한다.라고밖에 생각이 나질 않았다.
보통은 이정도만 아는 사람이 많을 것이다. 나도 그랬었다.
하지만 오늘 이 둘에 대해 한번 알아보도록 하자.
1. ==와 equals는 어떤 점에서 같은지?
둘 다 어떠한 두 내용을 비교하고 true 나 false를 반환한다는 점에서 같다고 볼 수 있다.
2. 어떤 점에서 다른지?
a) 일단 쓰이는 형태가 다르다고 볼 수 있다.
==은 비교연산자이며 equals는 메소드라는 점에서 다르다.
++) equals는 최상위 Class인 Object 클래스에 정의된 메소드 이므로 비교 대상이 객체인 경우에만 호출해 사용이 가능하다.
b) ==과 equals는 비교하는 대상이 다르다고 볼 수 있다.
int와 Integer (Wrapper Class)를 예시로 들어보도록 하자.
public class Main
{
public static void main(String[] args) {
int a = 1;
Integer b = 1;
Integer c = new Integer(1);
System.out.println(a==b); //실행결과 true
System.out.println(a==c); //실행결과 true
System.out.println(b==c); //실행결과 false
}
}
a, b, c는 모두 1인데 왜 이런 결과가 나올까?
그 이유는 바로 ==와 equals의 동작 방식이 다르기 때문이다.
equals는 내부의 값을 비교하는 반면,(필요시 오버라이딩을 통해 재정의 가능)
==는 비교 대상에서 둘 중 하나 이상이 primitive type(int)인 경우 값을 비교하고,
비교 대상이 둘다 Wrapper Class(Integer)와 같이 객체인 경우 주소를 비교한다는 차이가 있다.
==의 동작 방식을 표로 요약하면 다음과 같다.
primitive type | Wrapper Class(혹은 객체,Class) | |
primitive type | 값을 비교 | 값을 비교 |
Wrapper Class(혹은 객체,Class) | 값을 비교 | 주소를 비교 |
용어설명
++Integer이란 정수를 담는 Wrapper Class이다.
++오버라이딩이란? 부모 클래스에서 정의된 메소드를 자식 클래스에서 재정의 하는 것을 의미한다.
'프로그래밍' 카테고리의 다른 글
[자격증] 정보처리기능사 소개, 준비과정 및 합격 후기(+군대) (0) | 2023.04.30 |
---|---|
[군대][자격증]COS PRO자격증으로 얻을 수 있는 점수 정리(육군, 공군, 해군, 해병대) (0) | 2023.04.28 |
[티스토리][SEO]대체 텍스트(alt)를 넣었음에도 URL 검사시 alt 속성 누락 오류 해결 (2) | 2023.04.16 |
[자격증][Python] Cos Pro 2급 소개, 준비과정 및 후기(+군대) (1) | 2023.04.15 |
[Visual Studio Code]비주얼 스튜디오 코드 설치하기 (0) | 2022.11.22 |