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클래스의 생성자와 메서드



- 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() 메서드를 사용해서 변환이 가능하다. (다른 기본형 타입도 마찬가지.)

문자열 -> 기본형에서 숫자의 경우에는 진법을 정할수 있다. 기본은 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 |