티스토리 뷰
반응형
알고리즘을 풀던 중 == 와 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 |
댓글