Java | ==과 equals의 차이. 문자열 비교할 땐 뭘써야 할까?

박예선·2023년 3월 19일
0

Java

목록 보기
1/6
post-thumbnail

코딩테스트 기초문제들 연습을 하다가
문자열 비교에선 == 연산자 보단 equals 메서드를 사용해야 한다는 것을 알았다.
하지만 명확한 이유를 모르겠어서 원리를 찾아보았다.

틀린 부분이 있다면 댓글부탁드립니다 피드백 환영⭐️


원시 데이터 타입, 비 원시 데이터 타입

자바에는 원시 데이터 타입과 비 원시 데이터 타입이 존재하고,
그 둘은 메모리상 저장방식과 처리방식에 있어서 차이가 존재한다.

원시 데이터 타입
primitive
비 원시 데이터 타입
non primitive
booleanString
intArray
doubleDate
shortFile
long...
float...
char등등

원시 데이터 타입은 변수들의 동일한 값을 가지고 있을 경우, 메모리 상 같은 주소에 저장된다.
비 원시 데이터 타입은 변수들이 서로 동일한 값을 가지고 있더라도
메모리 상 별개의 공간에 저장이 된다(주소가 다르다).

==과 equals()의 차이

  • == : 메모리 상에서 같은 주소를 가리키고 있는지 확인
  • equals : 같은 값을 가지고 있는지 확인

원시 데이터 타입과 비 원시 데이터 타입의 차이 때문에
메모리 상에서 같은 주소를 가리키고 있는지를 확인하는 ==연산자를 사용할 때
원시 데이터 타입은 값이 동일하면 true를 반환한다.
비 원시 데이터 타입은 값이 동일하더라도 주소가 다르기 때문에
false를 반환한다.

하지만 ❓ String 타입은 워낙 자주 사용되기 때문에 예외적으로
==동등비교연산자를 사용했을 때 true가 나오는 경우가 있다.
그러나, 오류가 발생할 수 있으므로 오직 값이 같은지를 비교하는 equls()메소드를 사용하는 것이 좋다.


확인해보기

개념을 알았다면 직접 코드로 쳐보며 익히는 것이 중요한 것 같다.
이런 저런 경우의 수를 만들어서 궁금증 해결 완료!!!

import java.util.Scanner;

public class Practice {
    public static void main(String[] args) {
        String a = "hi";
        String b = "hi";
        String c = new String("hi");
        String d = "h" + "i";
        String e = new String("h") + "i";

        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        System.out.println(a == b);             // true
        System.out.println(a == c);             // false
        System.out.println(b == c);             // false
        System.out.println(a == d);             // true
        System.out.println(a == e);             // false
        System.out.println(d == e);             // false


        System.out.println(a == input);         // hi 입력 시 false
        System.out.println("hi".equals(input)); // hi 입력 시 true
    }
}

⬇ 참고자료
블로그
공식문서 (자바 공식문서는...증말 별루다ㅠ)
생활코딩 유튜브 (10분) -> 이해에 큰 도움됨!!

profile
개발 좋아 lynn08082@gmail.com

0개의 댓글