All About IT
[Java 기초] String 문자열을 비교하는 '==' 연산자와 equals 메소드의 차이점
안녕하세요~
이번 시간에는 문자열 비교할 때 사용하는 연산자와 메소드에 대해 알아보려고 하는데요.
어떤 원리를 통해 활용되는지 살펴볼까요?
다양한 문자열 생성 및 비교방식
package day31;
public class 문자열비교 {
public static void main(String[] args){
String str1 = "사과";
String str2 = "사과";
String str3 = new String("사과");
String str4 = new String("사과");
String str5 = str1;
String str6 = str3;
System.out.println(str1 == str2);
System.out.println(str1 == str3);
System.out.println(str1 == str5);
System.out.println();
System.out.println(str1.equals(str2));
System.out.println(str1.equals(str3));
System.out.println(str1.equals(str5));
System.out.println();
System.out.println(str3 == str4);
System.out.println(str3 == str6);
System.out.println();
System.out.println(str3.equals(str4));
System.out.println(str3.equals(str6));
}
}
리터럴을 사용하는 방식, new를 사용하는 방식, 주소값을 대입하는 방식으로 String 변수 생성 후 비교하는 코드
오늘의 핵심 키워드
- 비교연산자(==)은 주소값을 비교한다.
- equals() 메소드는 주소값을 따라찾아가서 객체의 내용을 비교한다.
- String은 변수를 생성할 때 리터럴을 사용하면 String Constant Pool 영역에 저장, new를 사용하면 Heap 영역에 저장한다.
① "사과"라는 리터럴을 사용한 str1, str2
② new를 사용해 객체를 생성한 str3, str4
③ 각각 str1의 주소값, str3의 주소값을 똑같이 가져가는 str5, str6
① String Constant Pool 영역에 저장된 "사과"를 공유하는 str1, str2 => true
② String Constant Pool 영역에 존재하는 "사과"와 Heap 영역에 존재하는 "사과"를 각각 참조하는 str1, str3 => false
③ 주소값 자체를 공유하는 str1, str5 => true
① String Constant Pool 영역에 저장된 "사과" 공유 => true
② String Constant Pool 영역에 존재하는 "사과"와 Heap 영역에 존재하는 "사과" 내용 비교 => true
③ 주소값 공유 => true
① 서로 다른 객체지만 객체 내부의 존재하는 "사과" 내용 비교 => true
② 주소값 공유 => true
최종 출력본
꼭 봐야되는 마무리 꿀팁!
- 문자열 비교할 때는 equals() 메소드 사용하기!
- String 변수 생성 시 간단하게 리터럴 사용하기!
▲ 영상으로 한번 더 복습하세요! :)