[Java] 자바 문자열 (String)과 상수 문자열 (String) 그리고 equals() 메서드


유틸리티 클래스 : String

- 내부적으로 char[]을 이용하여 문자열을 처리한다.

- 문자열을 다루는 기능을 포함하고 있다.

- 즉, 문자를 저장하는 char[] 배열과 그 배열을 다루는 메서드를 구비한 

  데이터 타입이라 볼 수 있다.

- String 클래스는 immutable(변하지 않는) 객체이다.

  한 번 값이 결정되면 변하지 않는다.

  값을 바꾸려 하면 새로운 문자열 인스턴스가 자동 생성된다.



문자열 주소 비교 예제 1


public class Test02_1 {

  public static void main(String[] args) {
     //1) 문자열의 인스턴스 주소를 저장할 변수 선언
     String s1;
    
     //2) 문자열 인스턴스를 생성
     // => Heap 영역에 char[] 배열이 만들어지고 그 배열안에 문자열이 보관된다.
     s1 = new String("Hello!");
    
     String s2 = s1;
     if (s1 == s2) { // 두 변수에 저장된 주소가 같은지 비교해 보자!
       System.out.println("s1 == s2");
     }
     System.out.println();
    
  }

}

- 실행결과 : 

s1 == s2





상수 문자열 

- new 연산자 없이 인스턴스를 생성한다.

- heap이 아니라 Constant Pool 이라는 상수만 모아두는 영역에서 따로 관리한다.

-중복해서 생성되지 않는다.





public
static void main(String[] args) {
    String s1 = "Hello"; // new String("Hello")와 같지만, heap이 아니라 Constant Pool 영역에 생성된다.
    String s2 = "Hello"; // 한번 생성되면 기존의 상수 문자열 인스턴스의 주소를 리턴한다.
   
     if (s1 == s2) { // 상수 문자열을 가리키는 레퍼런스 비교
       System.out.println("s1 == s2");
     } else {
       System.out.println("s1 != s2");
     }
    

  }

- 실행 결과 :

s1 == s2






equals() 메서드


 문자열의 주소가 아니라 문자열의 '값'을 비교하고 싶다면 equals() 메소드를 이용해

 야 한다. equals() 메서드는 s1에 저장된 주소로 찾아가서 그 인스턴스의 문자 배열을

 보관한다. 그리고 s2에 저장된 주소로 찾아가서 그 인스턴스의 문자 배열을 보관

 한다. 이 두 개의 문자 배열의 값을 하나씩 비교하여 끝까지 같다면 true를 리턴하고

 같지 않다면 false를 리턴한다.




equals() 메서드 예제


public static void main(String[] args) {

    String s1 = new String("Hello");
    String s2 = new String("Hello");
   
     if (s1.equals(s2)) { // 문자열인스턴스주소1.equals(문자열인스턴스주소2)
       //equals() 메서드는 s1에 저장된 주소로 찾아가서 그 인스턴스의 문자 배열과
       //s2에 저장된 주소로 찾아가서 그 인스턴스의 문자 배열을 한 개씩 비교하여
       //끝까지 같다면 true를 리턴한다. 다르면 false를 리턴한다.
       System.out.println("s1 == s2");
     } else {
       System.out.println("s1 != s2");
     }
    

  }



- 실행 결과 :

s1 == s2











블로그 이미지

필로그래머

,