안녕하세요~ 

이번 시간에는 문자열 비교할 때 사용하는 연산자와 메소드에 대해 알아보려고 하는데요.

어떤 원리를 통해 활용되는지 살펴볼까요?

다양한 문자열 생성 및 비교방식

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 변수 생성 후 비교하는 코드


오늘의 핵심 키워드

  1. 비교연산자(==)은 주소값을 비교한다. 
  2. equals() 메소드는 주소값을 따라찾아가서 객체의 내용을 비교한다.
  3. 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 변수 생성 시 간단하게 리터럴 사용하기!

▲ 영상으로 한번 더 복습하세요! :)