본문 바로가기
개인공부

equals와 == 차이점 (이런 실수를??)

by 리승우 2023. 1. 3.

최근 소규모 프로젝트를 진행하며 예상치 못하게 약 20분간? 난항을 겪었던 부분이 있었다.

 

클라이언트 단에서 ID값을 던지면, 해당 값으로 DB에 저장되어 있는 Row를 찾아서

안에 있는 isChecked값이 Y면 N으로, N이면 Y로 바꾸는 것이었는데

계속 조건문이 실행되지 않았다.

 

이런 걸 까먹고 있었다니...

==는 주소값을 대조하는 것이기때문에 당연히 안되었던 게 맞다.

equals로 대상의 내용 자체를 비교해야했었다.

 

배웠으면서 이런 부분에서 난항을 겪은 게 참 부끄럽다.

그런 의미에서, 두 번 착각하지 않으려고 equlas와 ==의 차이점에 대해 글을 쓰려고 한다.

 

아래는 기존에 작성한 코드이다. 정정 코드도 아래에 기술해두었다.

    @Transactional
    public FixedCheckResponseDto fixedChecked(Long fixedId) {
        FixedExtension fixedExtension = fixedRepository.findById(fixedId).orElseThrow(
                () -> new CustomCommonException(ErrorCode.FIXED_ID_FOUND)
        );

        log.info(fixedExtension.getFixedExtensionName());
        log.info(fixedExtension.getIsChecked().getClass().getName());

        fixedExtension.changeChekced();

        log.info("업데이트 완료");

        return new FixedCheckResponseDto(fixedExtension);
    }
    public void changeChekced() {
        if (this.isChecked == "N") {
            this.isChecked = "Y";
        } else {
            this.isChecked = "N";
        }
    }

▼ 정정 코드

    public void changeChekced() {
        if (this.isChecked.equals("N")) {
            this.isChecked = "Y";
        } else {
            this.isChecked = "N";
        }
    }

 

equals와 ==의 차이점은?

공통점

> 기본적으로 둘 다 양 쪽에 있는 내용을 비교한 값을 boolean type으로 반환한다.

 

차이점

1. 형태의 차이

> equals() 는 객체끼리 내용을 비교해주는 메소드이다.

> ==은 비교를 위한 연산자이다.

 

2. 주소값 비교와 내용 비교

> equals() 메소드는 비교하고자 하는 대상의 내용 자체를 비교해준다.

> == 연산자는 비교하고자 하는 대상의 주소값을 비교해준다.

 

참고예시

String a = "aaa";

String b = a;

String c = new String("aaa");

 

a, b, c 모두 "aaa"라는 내용을 가지고 있다.

하지만 주소값에 대해서는? 다른 값을 가지고 있다.

각자 주소값에 대한 내용은 아래 그림과 같다.

 

 

아래는 조건문에 따른 결과 내용을 기술하였다.

System.out.println( a.equals(b));
a와 b가 가지고 있는 내용을 비교하였으므로 true

System.out.println( a == b);
a와 b가 가지고 있는 주소값을 비교하였으므로 true

System.out.println( a ==c );
a와 c가 가지고 있는 주소값을 비교하였으므로 false

System.out.println( a.equals(c));
a와 c가 가지고 있는 내용을 비교하였으므로 true

 

다음번엔 또 까먹고 이런 실수하지말자! 

'개인공부' 카테고리의 다른 글

2023.01.13 TIL  (0) 2023.01.13
2023.01.05 TIL  (0) 2023.01.04
2022.12.27 TIL  (0) 2022.12.27
2022.12.26 TIL  (0) 2022.12.26
2022.12.24 TIL  (0) 2022.12.24

댓글