[CS 면접 지식 -Java] 동일성과 동등성, equals()와 ==의 차이

2024. 12. 19. 23:58·면접 준비/Java
728x90
반응형
SMALL

동일성과 동등성은 객체를 비교할 때 중요한 방식이다.

자바에서는 두 개의 객체 또는 값을 비교할때 equals()또는==를 통해 구분할 수 있다.

 

1. equals와 ==의 차이

equals()는 객체의 내용을 비교하는 반면, ==는 객체의 참조주소를 비교한다. 따라서 두 객체의 내용이 같더라도 서로 다른 객체라면 equals()는 true를 반환할 수 있지만 ==는 false를 반환한다.

 

2. 동등성(Equality)

 

동등성은 논리적으로 객체의 내용이 같은지 비교한다. 이때 사용하는 equals()메서드는 클래스에서 오버라이드하여 어떤 값을 비교할 것인지 설정할 수 있다.이때 중요한건 객체의 equals뿐만 아니라 hashCode도 오버라이드를 해줘야 한다는 점이다.

그 이유는 해시값을 사용하는 자료 구조는 hashCode 메서드의 반환값을 사용하기 때문이다. hashCode 메서드의 반환 값이 일치한 이후 equals 메서드의 반환값이 참일 때에만 논리적으로 같은 값이라고 판단한다.

 

3. 동일성(Identity)

 

== 연산자를 사용하여 동일한 참조 주소를 갖는지 판단한다. String 클래스는 new 연산자로 새로운 문자열 객체를 만들지 않는 한 상수풀에 등록된 동일한 값을 사용하기 때문에 따로 값을 재정의하지 않아도 ==와equals()에서 동일한 값을 비교할 경우 true로 반환된다. 하지만 new연산자로 생성한 경우 에는 객체의 참조 주소값이 달라지기 때문에 ==에서 false가 발생한다.

 

public class Test{

private final int value;

public Test(int value){
	this.value = value;
}

@Override
public boolean equals(Object o){
	if (this == o) return true;
    if (o== null || getClass() != o.getClass()) return false;
    return value == o.value;
}

@Override
public int hashCode(){
	return Objects.hashCode(value);
}

public static void main(String[] args){
	Test testObject = new Test(1000);
    Test newTestObject = new Test(1000);
    
    System.out.println(testObject.equals(newTestObject)); //true
	}
}

 

 

4. 만약 Wrapper 클래스라면?

 

래퍼 클래스 또한 객체이므로 ==연산자를 통해 참조 주소를 비교한다. 값 비교를 원할 경우에는 equals()메서드를 사용해야 한다.

자바는 특정 범위의 래퍼 객체를 캐싱하므로 같은 값의 객체가 같은 값을 참조하고 있을 수도 있다. 

일반적으로는 equals()를 사용하는 것이 좋다.

728x90
반응형
SMALL

'면접 준비 > Java' 카테고리의 다른 글

[Java- Thread] 스레드 풀 포화 정책 이란?  (1) 2025.05.22
NullObjectPattern이란?  (0) 2025.05.11
'면접 준비/Java' 카테고리의 다른 글
  • [Java- Thread] 스레드 풀 포화 정책 이란?
  • NullObjectPattern이란?
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (325)
      • 면접 준비 (22)
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      백준
      자바 반복문
      HTML
      jsp기초
      자바 알고리즘
      리눅스마스터2급정리
      자바
      스프링프레임워크
      redis
      jsp request
      JavaScript
      spring redis
      Til
      리눅스마스터2급
      자바기초
      Spring Data Redis
      자바 면접
      JSP
      CSS
      프로그래머스
      리눅스
      JS
      redis 채팅
      Spring
      java
      Springframework
      springsecurity
      레디스
      자바 면접질문
      자바스크립트
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [CS 면접 지식 -Java] 동일성과 동등성, equals()와 ==의 차이
    상단으로

    티스토리툴바