자바(Java)/JAVA 2SE

자바의 문자열을 나타내는 String 클래스

본클라쓰 2009. 8. 13. 20:59

 자바는 문자열을 다루기 위한 클래스로 String 클래스와 StringBuffer 클래스를 제공한다. String 클래스는 문자열이 변하지 않는 상수(고정된) 문자열을 다룰 때 사용하는 클래스이며, StringBuffer 클래스는 문자열이 동적으로 계속 변할 때 사용하는 문자열 클래스이다.

 

 

■ String 클래스

 

 java.lang.String 클래스는 자바에서 문자열을 다루는 클래스로 문자열을 상수로 직접 생성하는 방법과 'new' 키워드를 사용하여 생성하는 두 가지의 생성 방법을 가지고 있고, 생성 방법에 따라 다른 특징을 가지고 있다. 

 

 

1. 문자열을 상수로 직접 생성하는 방법

 

 문자열 상수를 지정하는 경우는 해당 문자열을 자바 가상 머신 전체에서 공유한다. 이 방법으로 문자열 객체를 사용하면 같은 문자열에 대해서는 String 객체의 변수명이 달라고 같은 레퍼런스를 가진다.  

 

String str = "문자열";

 

 

2. new 키워드를 사용하여 생성하는 방법

 

 new 생성자를 통해 문자열을 생성하면 문자열의 내용이 같은 것이 있다 하더라도, 매번 새로운 인스턴스가 생성된다. 따라서, String을 비교하는 경우에는 다른 인스턴스와 마찬가지로 equals() 메소드를 사용해야 한다.

 

String str = new String("문자열");

 

 

 

※ 문자열의 비교 방법

 

 생성 방법의 차이 때문에 String 문자열을 비교할 때 주의할 점이 있다. 보통 문자열을 비교할 때는 '==' 연산자를 사용하거나 equals() 메소드를 사용하여 비교한다.

 

String name1 = "홍길동';

String name2 = new String("홍길동");

 

 위의 예제에서 '==' 연산자를 사용하여 두 개의 문자열을 비교하면 false를 반환한다. '==' 연산자는 String 객체의 레퍼런스를 비교하여 값을 출력하는데, 메모리를 가리키는 곳이 같을 때 true를 반환한다. 위의 예제에서 아래 문자열은 new 연산자를 사용하여 문자열을 새롭게 생성했기 때문에 '==' 연산자 비교는 메모리에서 다른 주소의 문자열을 비교하는 결과가 된다. 따라서, 위의 두 문자열은 메모리 주소값이 다르기 때문에 false를 반환한다.

 

 반면에 equals() 메소드를 사용하면 String 문자열의 값이 동일한 지를 비교한다. 즉, char 값이 동일하다면 true를 반환한다. 위의 예제처럼 두 개의 문자열은 동일한 문자열 값을 가지므로 equals() 메소드를 사용하면 true를 반환한다.  

 

 

● String 클래스의 메소드

 

메소드

설명

int length()

String 객체의 문자열 길이를 반환

boolean equals(Object object)

두 문자열이 같은지를 비교하여 참/거짓을 반환

boolean equalsIgnoreCase(String str)

대소문자 구분없이, 두 문자열이 같은지를 비교

String subString(index begin, int end)

주어진 begin값부터 end까지의 문자열을 반환

String concat(String str)

인자로 주어진 문자열을 기존의 문자열과 합쳐 새로운 문자열 반환

String replace(char oldChar, char newChar)

기존의 문자를 newChar로 표시된 문자로 변환

String toLowerCase()

문자열의 모든 문자를 소문자로 변환

String toUpperCase()

문자열의 모든 문자를 대문자로 변환

char charAt(int index)

index로 지정한 곳의 문자값을 반환

 

 

 문자열 처리시 인덱스 처리방법에 대해 알기 쉬운 그림이 아래 그림이다.

 

[출처:http://download.oracle.com/javase/tutorial/java/data/manipstrings.html]

 

 인덱스를 제대로 지정하지 않으면 StringIndexOutOfBoundsException이 발생하여 throws 해 버린다.