본문 바로가기
Java/Java 기초문법

[JAVA 기초] 자바 문자열 비교 (연산자 ==와 메서드 equals와 차이)

by dev수니 2021. 3. 3.
반응형

 

자바에서 값을 비교하는 방법으로 보통 연산자인 ==를 많이 사용한다. 하지만 문자열 타입의 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가 출력된다.

반응형

댓글