[String] 문자열(Java)
String 클래스는 Java.lang 패키지로 제공되는 Java 문자열 클래스이다.
별도의 import 없이 사용이 가능한데, 아래와 같이 선언을 할 수 있다.
위 둘의 차이는 이후 알아보기로 하자.
String 클래스는 한 번 인스턴스가 생성되면 수정할 수 없다. (immutable object)
값의 변경은 불가능하지만, 새 String을 만들어 바꿀 수는 있다.
위 코드 중에서 char[]를 String으로 바꾸는 것에 주목해보자.
아래와 같이 2가지 방법으로 바꿀 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package String;
public class StringClass {
public static void main(String[] args) {
String str = "ABCDFFG";
char[] temp_arr = str.toCharArray();
System.out.println(temp_arr); // ABCDFFG
temp_arr[4] = 'E';
// str = new String(temp_arr);
str = String.valueOf(temp_arr);
System.out.println(str); // ABCDEFG
}
}
|
cs |
즉, new String(char[] array) 혹은 String.valuOf(char[] array)를 이용!
그리고, 두 문자열이 같은지 비교하는 메서드로 equlas 메서드가 있는데, 왜 == 로는 비교를 할 수 없는지 살펴보자.
처음 String을 선언할 때 두 가지 방법이 있다는 것과 연결되는 내용이다.
두 방법의 차이는 리터럴로 선언하느냐, 인스턴스 객체를 생성하여 선언하느냐의 차이.
그 차이는 다음과 같다.
리터럴로 선언한 경우에는 두 변수가 같은 "text" 값을 가리키고 있다.
하지만, 인스턴스로 선언한 경우에는 서로 다른 객체를 생성하고 그 안에 "test"를 참조하고 있다.
따라서 아래와 같은 결과가 나타난다.
그러므로! String을 비롯한 primitive type이 아닌 경우에는 equals 메서드로 비교를 하도록 주의하자. 결국 코딩테스트를 준비하는 과정에서는 너무 당연하지만 == 대신 equals를 써야하는 것에 주의하는 것이 중요하니까.
String 클래스가 제공하는 메서드들은 다양하지만, 그중 일부를 정리하자면,
이어서 BOJ에서 문자열 관련 문제를 풀며 추가 정리하도록 하자.