JAVA equals()와 ==의 차이

·2022년 3월 19일
0

char와 String 의 차이

  • char
    -기본 자료형
    -문자 하나만 저장할 수 있고, 변수가 값을 직접적으로 가지고 있다.
  • String
    -참조 자료형
    -제한 없이 문자를 담을 수 있으며, 값이 위치한 좌표를 가지고 있다.

equals()와 ==의 차이

  • ==연산자
    -자바에서 기본적으로 제공하는 연산자
    -변수가 가진 값을 비교한다.(기본자료형의 경우 값 자체를 비교, 참조 자료형의 경우 좌표 값을 비교)
  • equals()
    -java.lang.Stirng 클래스에 들어있는 메소드
    -변수가 실제 가리키고 있는 값을 비교한다.

예문

		char a = 'a';
        char b = 'a';

        String c = "a";
        String d = "a";

        String e = new String("a");
        String f = new String("a");

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

        System.out.println(c.equals(d));	//true
        System.out.println(e.equals(f));	//true
        System.out.println(c.equals(f));	//true

String의 경우 리터럴을 이용한 생성과 new 연산자를 이용한 생성으로 생성방법이 나뉜다.

리터럴을 이용한 생성은 String pool 영역에 문자 a를 넣으며 그 좌표 값을 참조한고,
d는 같은 문자가 이미 String pool 영역에 있기 때문에 c와 동일한 값을 참조하게 된다.

new 연산자를 이용한 생성은 새로운 객체를 생성하게 되면서 String pool이 아닌 다른 객체를 생성하여 생성된 객체의 좌표 값을 참조한다. 따라서 e와 f의 주소가 각각 다른 좌표를 가지게 된다.

결과적으로 변수의 값 자체를 비교하는 == 연산자는 같은 좌표 값을 가진 c와 d는 같다고 판단하지만 다른 좌표 값을 가진 e와 f는 다르다고 판단한다.
그리고 변수가 가리키는 값을 비교하는 equals() 은 서로 다른 좌표 값을 가졌더라도 결과적으로 같은 문자를 가지고 있는 e와 f가 같다고 판단한다.

Kotlin에서의 ==/===의 차이

  • ==
    : 기본 자료형의 경우 자바와 동일하게 동작하지만 String과 같은 참조 자료형을 비교할 경우 ==을 사용하여도 내부적으로 equals를 호출하여 결과적으로 두 변수의 실제 값을 비교한다.

  • ===
    : 자바에서 참조 자료형을 ==으로 비교할때 와 같이 두 변수가 가진 좌표를 비교한다.

profile
으쌰으쌰🐜🐜

0개의 댓글