티스토리 뷰

JAVA, Kotlin

== 와 equals 차이?

UDUD 2021. 3. 3. 15:16
반응형

알고리즘을 풀던 중 == 와 equals 때문에 한참을 헤맸던 적이 있다.

분명 같은건 줄 알았는데.. 이제 알면 됐다..

== 와 equals 의 차이점을 정리하기 전에 CBV와 CBR에 대해 정리해보자.


1. CBV vs CBR

  • CBV ( Call By Value ) : 값에 의한 호출 이라는 뜻으로, 함수를 호출하면 그 변수를 그대로 전하는게 아니라 변수를 복사해서 전달하기 때문에 원본 변수에는 변화가 없습니다.
  • CBR ( Call By Reference ) : 참조에 의한 호출 이라는 뜻으로, 함수를 호출하면 그 변수의 주소값이을 복사하여 전달하므로, 원본에 접근이 가능합니다.

많은 예제들을 보면 알겠지만 CBV에 대한 예제는 java로 구현이 가능하지만, CBR에 대한 예제는 포인터 등을 사용하는 C/C++로 구현된 예제로 확인해 볼 수 있다.

C/C++는 Call By Value, Call By Reference 모두 가능하지만, JAVA는 항상 Call By Value이다.

이 내용을 먼저 정리한 이유는 == 와 equals의 차이가 CBV와 CBR의 차이이기 때문이다.

2. ==란?

  • >= <= != 와 같은 항등 연산자
  • CBR 로 a == b 라고 하면, a와 b의 값을 비교 하는게 아니라 같은 위치에 있는지 메모리 공간 ( 주소 ) 를 비교한다.
  • 비교 결과를 true, false와 같은 boolean Type으로 반환한다.
  • int, char, double과 같은 기본 유형 ( Primitive Type ) 에 대해 적용한다.

3. equals란?

  • 객체를 비교하는 메서드.
  • CBV 로 a.equals(b) 라고 하면, a와 b의 값을 비교한다.
  • 비교 결과를 true, false와 같은 boolean Type으로 반환한다.

4. 예제

public class sample{
    public static void main(String[] args) {

        String a = new String();
        String b = new String();
        String a1 = a;

        String c = new String("test");
        String d = new String("test");

                //CBR로 주소 비교
        System.out.println(a == b);  // false
        System.out.println(b == c);  // false
        System.out.println(c == d);  // false
        System.out.println(a == a1); // a1은 a를 가리키므로 true

                //CBV로 값 비교
        System.out.println(a.equals(b));  // true
        System.out.println(b.equals(c));  // false
        System.out.println(c.equals(d));  // true
    }
}
반응형

'JAVA, Kotlin' 카테고리의 다른 글

@Resource, @Autowired, @Inject 차이  (0) 2021.11.01
람다 Lambda 란?  (0) 2021.06.23
컴파일러 vs 인터프리터  (0) 2021.03.04
JPA 네이티브 쿼리 - param이 많을 때, 복합키일때  (0) 2020.11.16
Mock / Mockito 란?  (2) 2020.01.15
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함