요즘 스트레스를 받나
컨디션이 너무 안좋다
계속 졸리기만 하고 멍하고
정신차리자!
String클래스
자바에서는 문자열을 위한 클래스를 제공
String클래스는 문자열을 저장하고, 이를 다루는데 필요한 메소드를 제공
String클래스는 변경 불가능한 클래스!
|
1
2
3
4
|
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
private final char value[];
...
|
cs |
String클래스를 들여다보면, 문자열을 저장하기 위해 문자형 배열 변수 (char[] value)를 인스턴스 변수로 정의해놨음
인스턴스 배열 생성 시, 생성자의 매개변수로 입력받는 문자열은 인스턴스변수(value)에 문자형 배열(char[])로 저장됨
한번 생성된 String인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고, 변경은 불가
ex)
- '+'연산자를 이용해 문자열을 결합하는 것은, 새로운 문자열이 담긴 String인스턴스가 생성되는 것
문자열을 만들 때는 두가지 방법이 존재
- 문자열 리터럴을 지정하는 방법
- String클래스의 생성자를 사용해서 만드는 방법
|
1
2
3
4
|
String str1 = "abc"; // 문자열 리터럴, "abc"의 주소가 str1에 저장됨
String str2 = "abc"; // 문자열 리터럴, "abc"의 주소가 str2에 저장됨
String str3 = new String("abc"); // 새로운 String인스턴스 생성
String str4 = new String("abc"); // 새로운 String인스턴스 생성
|
cs |
String클래스의 생성자를 이용한 경우
- new 연산자에 의해 메모리할당이 이루어지기 때문에 새로운 String인스턴스가 생성됨
문자열 리터럴을 지정한 경우
- 문자열 리터럴은 이미 존재하는 것을 재사용 하는것
- 클래스가 메모리에 로드될 때 자동적으로 미리 생성
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class StringEx1 {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
System.out.println("String str1 = \"abc\";");
System.out.println("String str2 = \"abc\";");
System.out.println("str1 == str2 ? " + (str1 == str2)); // 같은주소를 참조하기 때문에 true
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("String str3 = new String(\"abc\");");
System.out.println("String str4 = new String(\"abc\");");
System.out.println("str3 == str4 ? " + (str3 == str4)); // 다른주소를 갖고있기때문에 false
System.out.println("str3.equals(str4) ? " + str3.equals(str4));
}
}
|
cs |
문자열 리터럴
자바 소스파일에 포함된 모든 문자열 리터럴은 컴파일 시에 클래스 파일에 저장됨
(같은 내용의 문자열 리터럴은 한번만 저장)
클래스 파일에는 소스파일에 포함된 모든 리터럴의 목록이 있음
해당 클래스 파일이 클래스 로더에 의해 메모리에 올라갈 때,
리터럴의 목록에 있는 리터럴들이 JVM내에 있는 '상수저장소'에 저장됨
상수저장소에 문자열 리터럴이 자동적으로 생성되어 저장되는 것
기본형 값을 String으로 변환
두가지 방법 존재
- 숫자에 빈 문자열"" 더하기
- valueOf() 사용하기
성능
valueOf() > 빈문자열"" 더하기
ex)
int i = 100;
String str1 = i + ""; // 100을 "100"으로 변환
String str2 = String.valueOf(i); // 100을 "100"으로 변환
String을 기본형 값으로 변환
두가지 방법 존재
- valueOf() 사용하기
- parseInt() 사용하기
ex)
int i = Integer.parseInt("100"); // "100"을 100으로 변환
int i2 = Integer.valueOf("100"); // "100"을 100으로 변환
(valueOf()의 반환타입은 int가 아니라 Integer인데, 오토박싱에 의해 Integer에서 int로 자동변환)
'아카이브 > 자바의 정석' 카테고리의 다른 글
| 9장 java.lang패키지와 유용한 클래스 20201023 (0) | 2020.10.23 |
|---|---|
| 9장 java.lang패키지와 유용한 클래스 20201018 (0) | 2020.10.18 |
| 9장 java.lang패키지와 유용한 클래스 20201014 (0) | 2020.10.14 |
| 8장 예외처리 20201012 (0) | 2020.10.12 |
| 8장 예외처리 20201009 (0) | 2020.10.09 |