반응형
자바에서 값을 비교하는 방법으로 보통 연산자인 ==를 많이 사용한다. 하지만 문자열 타입의 String은 메서드인 equals()를 주로 사용하는데 이는 == 은 주소값을 비교하고 equals는 값만을 비교한다는 차이점 때문에 발생되는 것이다.
이 차이를 이해하려면 먼저 String타입의 생성을 이해해야 한다.
일반적인 int, float같은 타입들은 대상에 주소값을 가지지 않는 형태로 사용된다. 하지만 String타입은 클래스타입이라 선언했을 때 주소값이 생성되기 때문에 같은 값을 갖더라도 주소값이 다를 수 있다.
이는 다음 내용을 숙지하면 이해가 쉬울 것이다.
1 Call By Reference (CBR)
대상에 주소값을 갖지 않는 형태로 사용된다. int, float, doble 같은 타입이 primitive type에 해당된다.
2 Call By Value (CBV)
대상을 선언했을 때, 주소값이 부여된다. 이에는 Class, Object(객체)가 해당된다. String또한 클래스이기 때문에 이에 해당된다.
String a = "java"
String b = new String("java");
sysout(a == b) // false
sysout(a.equals(b)); // true
위와 같이 a와 b의 주소값은 부여되었고, 연산자 == 의 경우 a와 b의 주소값을 비교하는 것이기 때문에 false,
메소드 equals의 경우 값 자체를 비교하는 것이기 때문에 true가 출력된다.
반응형
'Java > Java 기초문법' 카테고리의 다른 글
[JAVA 기초] 자바 배열(Array) - 1 선언과 생성 (0) | 2021.03.04 |
---|---|
[JAVA 기초] 제어문 - 반복문 (break, continue) (0) | 2021.03.03 |
[JAVA 기초] 제어문 - 반복문 (while문, do~while문) (0) | 2021.03.03 |
[JAVA 기초] 제어문 - 반복문 (for문 - 단일 for문, 다중 for문) (0) | 2021.03.03 |
[JAVA 기초] 자바의 특수문자와 printf 서식문자 (0) | 2021.03.02 |
댓글