키모스토리

문자열 타입 (String) 본문

Java/Java Basic

문자열 타입 (String)

키모형 2023. 2. 22. 15:20

자바에서는 문자열을 저장하기 위해 String 타입을 제공한다.

String 타입은 기본 타입이 아닌 참조 타입이다. 

 

String 타입에 값을 저장할 때는 쌍따움표("문자열") 사이에 문자열을 입력하여 대입한다.

String var1 = "A";
String var2 = "홍길동";

문자열 내부에 역슬래쉬(\)가 붙은 문자를 사용할 수 있는데 이를 이스케이프 문자라고 한다.

이스케이프 문자
\" " 문자를 포함
\' ' 문자를 포함
\\ \ 문자를 포함
\u16진수 16진수 유니코드에 해당하는 문자 포함
\t 출력 시 탭만큼 띄움
\n 출력 시 줄바꿈(라인피드)
\r 출력 시 캐리지 리턴

 

문자열을 기본 타입으로 변환

프로그램에서 문자열을 숫자 타입으로 변환하는 경우가 많이 발생한다. 

문자열을 기본 타입으로 변환하는 방법은 다음과 같다

변환타입 사용 예
String -> byte String str = "10";
byte value = Byte.parseByte(str);
String -> short String str = "200";
short value = Short.parseShort(str);
String -> int String str = "300000";
int value = Integer.parseInt(str);
String -> long String str = "4000000000";
long value = Long.parseLong(str);
String -> float String str = "12.345";
float value = Float.parseFloat(str);
String -> double String str = "12.345";
double value = Double.parseDouble(str);
String - > boolean String str = "true";
boolean value = Boolean.parseBoolean(str);

반대로 기본 타입을 문자열로 변경화는 경우에는 String.valueOf()메소드를 이용한다.

String str = String.valueOf(기본타입값);

 

리터럴 문자열과 new 연산자 (타입 비교 vs 값 비교)

String a = "abc";
String b = new String("abc");
String c = "abc";

System.out.println(a==b);   		// false
System.out.println(a.equals(b));  	// true
System.out.println(a==c);		// true	
System.out.println(a.equals(c));	// true
System.out.println(b==c);		// false
System.out.println(b.equals(c));	// true

1. 자바 스트링 풀

자바 스트링 풀은 JVM에 의해 스트링이 저장되는 특별한 메모리 영역 이다.

 

2. String Interning

Java에서 문자열의 불변성 덕분에 JVM은 풀에 각 리터럴 문자열의 복사본을 하나만 저장 하여 문자열에 할당된 메모리 양을 최적화할 수 있다. 이 과정을 interning이라고 한다.

String 변수를 만들고 값을 할당하면 JVM은 풀에서 동일한 값의 String을 검색한다.

발견되면 Java 컴파일러는 추가 메모리를 할당하지 않고 단순히 메모리 주소에 대한 참조를 반환한다.

찾을 수 없으면 풀에 추가되고(interned) 해당 참조가 반환된다. 

위의 경우 a에 사용된 메모리 주소를 c에서도 동일하게 이용하게 되어 a==b 는 true 가 된다.

 

3. 생성자를 사용하여 할당된 문자열

new 연산자를 통해 문자열을 생성하면 Java 컴파일러는 새 객체를 생성하고 JVM용으로 예약된 힙 공간에 저장한다.

이와 같이 생성된 모든 문자열은 고유한 주소를 가진 다른 메모리 영역을 가리킨다.

b의 경우와 같이 new 연산자로 문자열을 생성한 경우 유일한 객체가 된다.

a==b, b==c 결과는 flase 가 된다.

equals

equals는 두개의 문자열이 동일한지를 비교하여 결과값을 리턴한다.

위의 예제에서 a.equals(b),  a.equals(c) 는 "abc"라는 문자열 값이 동일한 값을 가지고 있으므로 true 가 된다.

indexOf

indexOf는 문자열에서 특정 문자열이 시작되는 위치(인덱스)를 리턴한다.

문자열 중 "Java"라는 문자열이 시작되는 위치를 알고 싶은 경우 indexOf를 다음과 같이 사용할 수 있다.

String a = "Hello Java";
System.out.println(a.indexOf("Java"));  // 6 출력

"Hello Java" 라는 문자열에서 "Java"라는 문자열은 일곱번째 문자('J')부터 시작이다. 결과값이 7이 아닌 6으로 나온 이유는 자바는 숫자를 0부터 세기 때문이다.

contains

contains는 문자열에서 특정 문자열이 포함되어 있는지의 여부를 리턴한다.

String a = "Hello Java";
System.out.println(a.contains("Java"));  // true 출력

 

charAt

charAt은 문자열에서 특정 위치의 문자(char)를 리턴한다.

"Hello Java" 문자열에서 "J"라는 문자는 6번째 인덱스에 위치한 문자이다. 6이라는 숫자로 "J"라는 문자를 얻기 위해서는 다음과 같이 charAt을 사용한다.

String a = "Hello Java";
System.out.println(a.charAt(6));  // "J" 출력

replaceAll

replaceAll은 문자열 중 특정 문자열을 다른 문자열로 바꾸고자 할 때 사용한다.

String a = "Hello Java";
System.out.println(a.replaceAll("Java", "World"));  // Hello World 출력

substring

substring은 문자열 중 특정 부분을 뽑아낼 경우에 사용한다.

String a = "Hello Java";
System.out.println(a.substring(0, 4));  // Hell 출력

toUpperCase

toUpperCase는 문자열을 모두 대문자로 변경할 때 사용한다. (모두 소문자로 변경할때는 toLowerCase를 사용한다.)

String a = "Hello Java";
System.out.println(a.toUpperCase());  // HELLO JAVA 출력

split

split 메서드는 문자열을 특정 구분자로 나누어 문자열 배열로 리턴하는 메서드이다.

String a = "a:b:c:d";
String[] result = a.split(":");  // result는 {"a", "b", "c", "d"}

 

반응형

'Java > Java Basic' 카테고리의 다른 글

콘솔로 변수값 출력 - print(), println(), printf()  (0) 2023.02.24
타입 변환  (0) 2023.02.22
변수 및 기본 타입  (0) 2023.02.22
Java 입문  (0) 2023.02.21