String 클래스의 메서드, 생성자에 대한 내용이 궁금하다면 하단 링크를 클릭 하자.
03. [자바] String생성자, 메서드(표)
메서드 / 설명 예 제 결 과 String(String s) String s = new String("Hello"); s = "Hello" 주어진 문자열(s)를 갖는 String인스턴스를 생성한다. String(char[] value) char[] c = {'H', 'e', 'l', 'l', 'o'}; S..
staticclass.tistory.com
String클래스?
자바는 문자열을 위한 클래스를 제공한다. 그 것이 바로 String클래스인데 String클래스는 문자열을 저장하고
이를 다루는데 필요한 메서드를 함께 제공한다.
지금까지는 String클래스의 기본적인 몇 가지 기능만 사용해 왔지만 String클래스는 아주 중요하니 자세히 공부하자.
변경 불가능한(immutable) 클래스
String클래스에는 문자열을 저장하기 위해 문자형 배열 char[]
를 인스턴스 변수로 정의해놓고 있다.
인스턴스 생성 시 생성자의 매개변수로 입력받는 문자열은 이 인스턴스변수에 문자형 배열로 저장된다.
String str = "안녕하세요?";
char[] cArr = {'안', '녕', '하', '세', '요', '?'};
이런식으로 저장이 된다.
한번 생성된 String은 읽어 올 수만 있고, 변경할 수는 없다.
예를 들어 +
연산자를 이용하여 문자열을 결합하면 인스턴스 내의 문자열이 바뀌는게 아니라
새로운 문자열 ("ab")이 담긴 String인스턴스가 생성되는 것이다.
String a = "a";
String b = "b";
String a = a + b;
덧셈연산자 +
를 사용해 문자열을 결합하면 연산 시 마다 새로운 String인스턴스가 생성되어
메모리공간을 차지하게 되므로 가능한 결합횟수를 줄이는 것이 좋다.
문자열간의 결합이나 추출 등 문자열을 다루는 작업이 많이 필요한 경우 String 대신StringBuffer
클래스를 사용하자.StringBuffer
는 저장된 문자열의 변경이 가능
하기 때문에 하나의 StringBuffer로도 문자열을
다루는 것이 가능하다.
문자열의 비교
문자열을 만들 때는 두가지 방법이 있다.
String str1 = "abc"; // 문자열 리터럴 "abc"의 주소가 str1 에 저장됨
String str2 = "abc"; // 문자열 리터럴 "abc"의 주소가 str2 에 저장됨
String str3 = new String("abc"); // 새로운 String인스턴스를 생성
String str4 = new String("abc"); // 새로운 String인스턴스를 생성
String클래스의 생성자를 이용한 경우에는 new연산자에 의해서 메모리 할당이 이루어지기 때문에
항상 새로운 String인스턴스가 생성된다. 그러나 문자열 리터럴은 이미 존재하는 것을 재사용 한다.
equals()
로 비교했을 때는 두 문자열의 내용("abc")을 비교하기 때문에 두 경우 모두 true
를 결과로 받지만
각 String인스턴스의 주소를 등가비교연산자'=='
로 비교했을 때는 결과가 다르다.
public class StringTest {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
System.out.println("str1 == str2 ? " + (str1 == str2));
System.out.println("str1.equals(str2) ? " + str1.equals(str2));
System.out.println();
String str3 = new String("\"abc\"");
String str4 = new String("\"abc\"");
System.out.println("str3 == str4 ? " + (str3 == str4));
System.out.println("str3.equals(str4) ? " + str3.equals(str4));
}
}
// 결과
// str1 == str2 ? true
// str1.equals(str2) ? true
// str3 == str4 ? false
// str3.equals(str4) ? true
빈 문자열(empty string)
길이가 0인 배열이 있듯이
char[] chArr = new char[0]; // 길이가 0인 char배열
int[] iArr = {}; // 길이가 0인 int배열
String도 빈 문자열을 가질수 있다.String s = "";
과 같은 문장이 있을 때, 참조변수 s가 참조하고 있는 String인스턴스는
내부에 new char[0]
과 같이 길이가 0인 char형 배열을 저장하고 있다.
String s = null; // String s = ""; (빈 문자열로 초기화)
char c = 000; // char c = ' '; (공백으로 초기화)
일반적으로 변수를 선언할 때, 각 타입의 기본값으로 초기화 하지만
String은 참조형 타입의 기본값인 null
보다는 빈 문자열 String s = "";
로 초기화 하고
char형은 기본값인 '\u000'
대신 char c = ' ';
공백으로 초기화 하는것이 보통이다.'\u000'
은 유니코드의 첫 번재 문자로 아무런 문자도 지정되지 않은 빈 문자이다.
댓글