본문 바로가기

Web

== vs equals

728x90
반응형

== 연산자와 equals 함수는 무엇이 다를까

 

처음 == 과 equals를 배울 때 본인은 그저 String 자료형은 equals로 비교해야한다고만 배웠다.

그럼 왜 자료형이 int, char...등을 비교할 때는 == 연산자를 사용하면서 String을 비교할 땐 equals를 사용해야할까?

 

내가 찾아본 답은 String은 int, char와 같은 일반적인 자료형이 아닌 클래스이기 때문이다.

 

쉽게 int와 String 변수를 선언할 때를 생각해보자

먼저 자료형이 int인 변수를 선언할 때

int a = new int (123);

이런식으로 선언하면 오류가 발생할 것이다.

int는 그냥

int a = 123;

이렇게 선언하면 된다.

 

하지만 자료형이 String인 변수를 선언할 때는

String b = "abc";

이런식으로 선언을 해도 되지만

String b = new String("abc");

이런식으로 선언을 해도 전혀 오류가 발생하지 않는다.

 

여기까지 String이 일반적인 자료형이 아닌 클래스라는 것에 대한 설명이었다.

그럼 왜 클래스인 String은 == 이 아닌 equals를 사용해야하는 것인가.

 

답은 일반적인 자료형(int,char...)은 Call by Value(주소값을 가지지 않고 값만 가지는 형태) 의 특성이고 클래스(String)은 Call by Reference(주소값을 가지는 형태)이기 때문이다.

 

그래서 일반적인 자료형(int,char...) 등은 == 연산자로 비교를 하면 두 가지 이상의 변수가 가지고 있는 값만을 비교하기 때문에 원하는 결과를 얻을 수 있지만 String(클래스)를 비교하게되면 변수가 가지고 있는 값이 아닌 주소값을 비교하기 때문에 원하는 결과를 얻지 못할 수 있다.

 

하지만 eqauls는 비교하는 변수의 주소값이 변수의 값을 비교해주기 때문에 String을 비교할 땐 equals를 사용해야한다.

 

String a = "abc";
String b = "abc";

a == b // a의 주소값 과 b의 주소값을 비교
a.equals(b) // "abc" 와 "abc"를 비교 

 

728x90
반응형

'Web' 카테고리의 다른 글

JAVA 설치 및 환경변수 설정  (0) 2022.08.03
jpg파일 여러장 pdf로 변환하기  (0) 2022.08.02
JAVA 오늘 날짜 구하기  (0) 2022.07.28
Maven 과 Gradle  (0) 2022.07.27
Apache struts 프로젝트에서 servlet으로 pdf 파일 읽기  (0) 2022.07.27