자바에서 String 객체는 불변(immutable)이다.
불변이라는 의미는 한번 생성되면 변경되지 않는다는 것을 말한다. 즉, String 문자열을 조작(서로 합치거나 나누거나)할 때마다 기존 객체가 변경되는 것처럼 보이지만 사실은 계속 새로 생성되는 것이다.
String 객체 생성
1. 일반적인 스트링의 리터럴 생성
String s = "HI";
2. new 키워드를 이용한 생성
String s = new String("HI");
당연히 코드가 많아지는 2번보다 1번이 많이 사용된다.
String 생성자
1. String(byte[] byte_arr) : byte 배열을 이용(디코딩)하여 새로운 스트링 객체를 생생한다. 디코딩에는 디폴트 캐릭터셋이 사용된다.
System.out.println("사용되는 기본 캐릭터셋 : " + Charset.defaultCharset().name()); // UTF-8
byte[] byte_arr = {72, 101, 108, 108, 111}; // 스트링 생성
String str = new String(byte_arr);
System.out.println("생성된 스트링 : " + str); // Hello
2. String(byte[] byte_arr, Charset char_set) : 1번과 유사하나 디폴트 캐릭터셋이 아니라 인자로 캐릭터셋을 지정할 수 있다.
byte[] byte_arr = {72, 101, 108, 108, 111};
String str = new String(byte_arr, Charset.forName("UTF-8"));
System.out.println("생성된 스트링 : " + str); // Hello
3. String(byte[] byte_arr, String char_set_name) : 3번과 유사하게 캐릭터셋을 지정하지만 Charset 객체가 아닌 스트링으로 캐릭터셋을 지정한다.
byte[] byte_arr = {72, 101, 108, 108, 111};
String str = new String(byte_arr, "UTF-8");
System.out.println("생성된 스트링 : " + str); // Hello
4. String(byte[] byte_arr, int start_index, int length) : 인자의 바이트 배열중 일부분을 인덱스로 지정하여 스트링 객체를 생성한다.
byte[] byte_arr = {72, 101, 108, 108, 111};
String str = new String(byte_arr, 1, 3);
System.out.println("생성된 스트링 : " + str); // ell
5. String(byte[] byte_arr, int start_index, int length, Charset char_set) : 4번과 동일하나 Charset객체만 인자로 추가됐다.
byte[] byte_arr = {72, 101, 108, 108, 111};
String str = new String(byte_arr, 1, 3, Charset.forName("UTF-8"));
System.out.println("생성된 스트링 : " + str); // ell
6. String(byte[] byte_arr, int start_index, int length, String char_set_name) : 4번과 동일하나 캐릭터셋을 String 객체로 추가하여 지정한다.
byte[] byte_arr = {72, 101, 108, 108, 111};
String str = new String(byte_arr, 1, 3, "UTF-8");
System.out.println("생성된 스트링 : " + str); // ell
7. String(char[] char_arr) : 캐릭터 배열을 인자로 스트링 객체를 생성한다.
char char_arr[] = {'H', 'e', 'l', 'l', 'o'};
String str = new String(char_arr);
System.out.println("생성된 스트링 : " + str); // Hello
8. String(char[] char_array, int start_index, int count) : 7번과 유사하나 배열의 일부분을 지정한다.
char char_arr[] = {'H', 'e', 'l', 'l', 'o'};
String str = new String(char_arr, 1, 3);
System.out.println("생성된 스트링 : " + str); // ell
9. String(StringBuffer s_buffer) : StringBuffer 객체를 인자로 스트링 객체를 생성한다.
StringBuffer s_buffer = new StringBuffer("Hello");
String str = new String(s_buffer);
System.out.println("생성된 스트링 : " + str); // Hello
10. String(StringBuilder s_builder) : StringBuilder 객체를 인자로 스트링 객체를 생성한다.
StringBuilder s_builder = new StringBuilder("Hello");
String str = new String(s_builder);
System.out.println("생성된 스트링 : " + str); // Hello
읽어주셔서 감사합니다. 도움이 되셨다면 광고 클릭 부탁드립니다.
모두 힘내세요! : )
'개발 > JAVA' 카테고리의 다른 글
StringBuffer(StringBuilder) 클래스 기본 및 사용 (0) | 2020.12.13 |
---|---|
String 메소드 살펴보기 (0) | 2020.12.12 |
Java 콘솔에서 값 읽기(BufferedReader, Scanner, Console) (0) | 2020.12.11 |
Java에는 Call-By-Value(Pass-By-Value)만 존재한다. (0) | 2020.12.11 |
Java string 비교(==와 equals 메서드 그리고 String.intern()) (0) | 2020.12.10 |