본문 바로가기
교육, 학습/멀티캠퍼스_풀 스택

JAVA 문법 - String클래스 동등비교시 equals 메서드 사용하는 이유

by 개발하는 경제학도 2021. 12. 30.

강의 소개

현재 수강하고 있는 멀티캠퍼스 지능형 웹서비스 풀스 텍 과정을 수강하며 적은 내용입니다.

교재로는 자바의 정석을 사용하고 있습니다.


String 클래스

string 클래스

2021.12.29 - [교육, 학습/멀티캠퍼스_풀스 텍] - JAVA 문법 - String과 Char 비교, 변수의 타입

 

JAVA 문법 - String과 Char 비교, 변수의 타입

강의 소개 현재 수강하고 있는 멀티캠퍼스 지능형 웹서비스 풀스 텍 과정을 수강하며 적은 내용입니다. 교재로는 자바의 정석을 사용있는 점 참고 부탁드립니다. 변수의 타입 자바 변수의 타입

structuring.tistory.com



string 클래스 특징

1) new 키워드 없어도 문자열 표현 가능하다.

String str1 = new String("java");  
String str2 = "java";  // new 키워드 없어도 된다

즉, new 를 사용하지 않아도 무방하다.

 

2) 덧셈 연산자(+)를 이용하여 문자열 결합을 할 수 있다.

String str1 = "java";
String str2 = "과정";
s1.concat(s2);  // "java과정"
s1 + s2;  //"java과정"

s1 + s2 로 단순 + 만 사용해도 문자열 결합을 할 수 있다.

 

3) 2개의 String 클래스 타입이 같은지 확인, 즉 동등성 비교를 하려면 equals를 사용해야 한다.

만약 아래와 같은 예시가 있다고 해보자.

String str1 = "java";
String str2 = new String("java");
String str3 = "java";
String str4 = new String("java");

 

이때, == 와 equals를 사용하여 각각 동등성 비교를 해본다면 아래와 같은 결과가 나온다.

str1 == str3; // true
str1 == str2 // false 
str1.equals(str2) // true

 

그 이유는 new로 생성하면 힙 메모리에 실제값을 담는 주소가 매번 새로 생기기 때문이다.

사진과 같이, new 키워드를 사용하지 않은 str1, str3 변수만 스택에서 0x100으로 같은 주소를 부여받았다.

스택에서 동일한 주소를 가졌으니, 힙에서도 같은 값을 가진다.

하지만 new 키워드를 사용한 str2, str4는 스택에서 각각 다른 주소를 부여받았기 때문에 당연히 힙에서 다른 값을 가리키는 것이다.

따라서, String은 겉보기에는 같은 값을 가진 것처럼 보이나(예시에서 java들) 서로 다른 주소 값을 가질 수 있어

동등 비교를 할 때 == 가 아닌

str1.equals(str2)과 같이 equals를 통한 동등 비교를 해야 하는 것이다.

 

 

출처: 자바의 정석(남궁 성 저), 멀티캠퍼스

댓글