1 분 소요

그동안 Spring을 사용해 개발하면서 ==equals()의 큰 차이점을 모르는 채로 equals() 만 사용을 해왔었다.

이 부분에 대해 정확히 개념을 잡아보려고 한다.

String 변수 생성

String 변수를 생성하는 방식에는 두가지 방식이 있다.

  • literal 을 이용한 방식
  • new 연산자를 이용한 방식

[literal을 이용한 방식]

  • string constant pool 이라는 영역에 존재하게 된다.

  • string constant pool 에 주어진 문자열이 있는지 검색한다.

    • 문자열이 있으면 해당 주소값을 반환
    • 문자열이 없으면 string constant pool에 넣고 새로운 주소값을 반환

[new 연산자를 이용한 방식]

  • Heap 영역에 존재한다.

image-20230308145823861

== 와 equals()

[==]

== 연산자는 비교하고자 하는 두개의 대상의 주소값을 비교한다.

[equals()]

equals() 연산자는 비교하고자 하는 대상의 값 자체를 비교한다.

코드로 알아보자

[Test Code]

@Test
    void equals() {
        String person1 = "tommy";
        String person2 = "tommy";
        String person3 = new String("tommy");
        String person4 = new String("tommy");

        // literal & literal 비교
        System.out.println("literal & literal 비교");
        System.out.println("person1, person2 '==' = " + (person1 == person2));
        System.out.println("person1, person2 'equals' = " + person1.equals(person2));

        // literal & String 비교
        System.out.println("literal & String 비교");
        System.out.println("person1, person3 '==' = " + (person1 == person3));
        System.out.println("person1, person3 'equals' = " + person1.equals(person3));

        // String & String 비교
        System.out.println("String & String 비교");
        System.out.println("person3, person4 '==' = " + (person3 == person4));
        System.out.println("person3, person4 'equals' = " + person3.equals(person4));

    }

[Test Result]

literal & literal 비교
person1, person2 '==' = true
person1, person2 'equals' = true

literal & String 비교
person1, person3 '==' = false
person1, person3 'equals' = true

String & String 비교
person3, person4 '==' = false
person3, person4 'equals' = true

person1, person2 는 literal으로, person3person4는 String으로 생성했다.

[literal & literal]

  • literal은 주소, 값이 같다.
    • == : true
    • equals() : true

[literal & String]

  • literal 과 String은 주소는 다르고 값은 같다.
    • == : false
    • equals() : true

[String & String]

  • String 과 String은 주소는 다르고 값은 같다.
    • == : false
    • equals() : true

카테고리:

업데이트:

댓글남기기