본문 바로가기
자바

== 연산자와 equals 메소드 차이점

by 복제비 2021. 11. 24.

== 연산자와 equals 메소드 차이점

 

1. == 연산자

 

== 연산자원시 데이터 타입에서 사용하는 연산자입니다.

 

8개의 원시 데이터 타입인 boolean, byte, char, short, int, long, float, double 에서 동일한 데이터인지의 여부를 비교하기 위해서 == 연산자를 사용합니다. 

원시 데이터 타입의 변수로 선언되면 메모리 공간이 할당되고, 할당된 메모리 공간에 실제 값이 들어갑니다.
그러므로 원시 데이터 타입의 경우 == 연산자는 변수가 가리키는 값을 토대로 같은지를 비교하게 됩니다.


원시 데이터 타입의 비교는 == 연산자를 사용하고 equals 메소드를 사용하면 에러를 발생시킵니다.

 

int a = 1;
int b = 1;
System.out.println(a == b);        // true
System.out.println(a.equals(b));   // 정수형 변수는 equals 메소드 사용불가로 에러 발생 

 

2. equals 메소드

 

동일한 주소가 아니더라도 가지고 있는 내용동일한 지를 서로 비교하기 위해서는 equals 메소드사용해서 비교를 수행합니다.

 

문자열(String) 방식으로 문자열생성할 때, 이미 같은 문자열을 생성했다면(s1 인스턴스 에서 생성)

새로운 변수(s2) 새로운 메모리 공간을 할당하지 않고 기존의 문자열(s1)저장된 메모리 주소를 가리키게 됩니다.

그러므로  문자열(String) 방식으로 할당한 두 변수 s1과 s2 는 == 연산자를 이용하였을 때
같은 주소를 가리키고 있으므로 true 가 나오게 됩니다.

s1과 s2의 문자열(String) 데이터를 비교하는  equals 메소드를 사용한 결과값도 모두 동일하므로 true 가 출력됩니다.

 

String s1 = "equal test";
String s2 = "equal test";
System.out.println(s1 == s2);         // true
System.out.println(s1.equals(s2));    // true 

 

문자열(String) 데이터를 가지는 각각의 인스턴스 s3 s4선언하면 각각메모리 주소할당받고,

할당받은 주소에 문자열 값을 넣어줍니다.

 

인스턴스 s3s4자신메모리 주소따로 존재하기 때문에

== 연산자사용하면 s3 과 s4 의 주소값을 비교하므로 false 값을 출력합니다.

 

그러므로, 인스턴스 s3s4내용이 같은지를 비교할 때는 equals 메소드사용해서 비교합니다.

 

String s3 = new String("equal test");
String s4 = new String("equal test");
System.out.println(s3 == s4);          // false (각각의 인스턴스 주소가 다름)
System.out.println(s3.equals(s4));     // true (각각의 인스턴스 내용을 평가함)

 

'자바' 카테고리의 다른 글

추상 클래스와 추상 메소드  (0) 2021.11.27
자바 배열  (0) 2021.11.26
자바 반복문 - while 문과 do while 문  (0) 2021.11.23
자바 반복문 - for 문  (0) 2021.11.22
자바 switch 문  (0) 2021.11.22

댓글