Java/개념

(java.lang) String 클래스

태감새 2023. 1. 13. 19:07

String 클래스

대표적인 메서드를 정리하기 전에 String 클래스의 특징에 대해 알아보자.

String 클래스 = char [] + 메서드   (문자 배열 + 필요 메서드)

- 변경 불가능한(immutable) 클래스

한 번 지정한 문자 객체는 변경이 불가능하다.

만약 두 문자 객체를 + 연산자로 더하면 원래 값이 변하는 게 아니라 새로운 객체를 만들어 더한 값을 저장한다.

다음 예시를 보면 이해하기 쉽다.

왼쪽 코드 진행시 일어나는 결과 (우측)

a가 참조하는 객체가  0x100에서 0x300으로 변한 것을 볼 수있다.

그래서 String  클래스의 덧셈 연산자는 그 수만큼 인스턴스를 생성하므로 지양해야 한다.

이를 보완한 메서드가 다음에 정리할 StringBuffer, Stringbuilder 메서드다. (String Buffer글 참조)

- 문자열의 비교

String은 객체지만 두 가지 방식으로 값을 정의할 수 있다.

String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
String str4 = new String("abc");

두 방식의 차이는 무엇인가?

아래의 그림을 보면 이해하기 쉽다.

두 방식의 차이

""로 정의하면 같은 문자열인 경우 하나의 인스턴스를 두 이름으로 참조하게 되고 new String을 하게되면 서로 다른 인스턴스를 생성하게 된다. 그래서 후자의 방식은 == 연산을 사용하면 주소가 다르므로 false결과가 도출된다. 값을 비교하려면 equals() 메서드를 사용해야 한다. (String 클래스에 equals() 메서드를 오버라이딩했기 때문에 두 객체의 문자열을 비교함.)

- 빈 문자열

생성 가능하다.

String s = null;
char c = '\u0000';

String s = "";
char c - ' ':	// 공백 사용

위의 방법보다 아래의 방법을 더 추천한다. 

 

 

String클래스의 생성자와 메서드

더보기
CharSequence는 char 배열을 사용하는 클래스의 조상 interface

 

- join()과 StringJoiner

join() 메서드는 각 문자열을 결합하는 메서드다. 사용 예시

String animals = "dog,cat,bear";
String[] arr = animal.split(",");   // ,를 기준으로 분리. arr = ["dog","cat","bear"]
String str = String.join("-",arr;)  // -로 문자열 배열을 String 결합
 				    // str = "dog-cat-bear"

java.util.StringJoiner 클래스를 사용해서 문자열을 결합할 수도 있다.

StringJoiner sj = new StringJoiner(",","[","]"); // 문자열 객체를 문자열로 합칠 때
String[] arr = {"aaa","bbb","ccc"};              // (사이에 들어올 문자,
                                                 //       첫문자, 끝문자)
for(String s: str Arr){                          // 규칙으로 결합한다.
	sj.add(s.toUpperCase());
}

- 문자열과 기본형 간의 변환

1. 기본형 -> 문자열

int i = 100;
String str1 = i + "";
String str2 = String.valueOf(i);

2. 문자열 -> 기본형

int i = Integer.parseInt("100");
int i = Integer.valueOf("100");

.valueOf()의 반환 타입은 Integer 이지만 오토박싱에 의해 자동으로 int으로 변환된다. 

오토박싱은 추후에 올릴 글에서 설명할 예정이다. (그 외 클래스 참고)

그래서 문자열 -> 기본형도 valueOf() 메서드를 사용해서 변환이 가능하다. (다른 기본형 타입도 마찬가지.)

parse메서드 말고 valueOf도 가능하다.

문자열 -> 기본형에서 숫자의 경우에는 진법을 정할수 있다. 기본은 10진법이고 2,8 진법 등 가능하다. 사용방법은 다음과 같다.

int i2 =Integer.parseInt("100",2) // 4
int i8 =Integer.parseInt("100",8) // 64
int i16 =Integer.parseInt("100",16) // 256
int i =Integer.parseInt("FF") // error

'Java > 개념' 카테고리의 다른 글

(java.lang) 그 외 클래스, 오토박싱  (0) 2023.01.13
(java.lang) StringBuffer와 StringBuilder 클래스  (0) 2023.01.13
(java.lang) Object 클래스  (0) 2023.01.13
11장 문제풀이  (0) 2023.01.02
7장 문제풀이  (0) 2022.12.25