== 연산자와 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"를 비교
끗
'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 |