Java, String - char
자바에서 문자열을 다루는 타입은 char, String 타입이 있다.
JavaString.java
public class JavaString {
public static void main(String[] args) {
char[] charArr = new char[]{ 'c', 'h', 'a', 'r'};
System.out.println(charArr);
String string = "Java String";
System.out.println(string);
}
}
출력결과
char
Java String
char
타입은 기본적으로 문자열 하나만 다루게 되고, 여러 개 출력이 필요한 경우 char[]
배열로 만들어서 사용한다. 이러한 불편한 요소를 Java에서는 문자열을 활용할 용도로 String 타입으로 제공하게 되었다.
String 타입은 다른 int, boolean, double...타입과 다르게 대문자로 시작하는 이유는 String 타입이 참조형 타입이다.
String 클래스를 생성하는 두 가지 방법
- 쌍따옴표로 문자열 표현: "Java String"
- 객체 생성하기: new String("Reference String");
String string = "Java String";
System.out.println(string); // Out: Java String
String refString = new String("Reference String");
System.out.println(refString); // Out: Reference String
여기서 String 클래스만의 특이한 모습을 발견할 수 있다.
- "String" 쌍따옴표로 감싼 경우 자바가 알아서 new String 객체 생성
- 문자열 pool 이라는 개념을 사용하여 성능 최적화가 된다.
- 다른 참조형은 출력하면
x000001
형태의 메모리 주소가 출력하나 String 객체는 문자열로 표현
String 구조
자바에서 String 클래스를 직접 들여다보면 다음과 같이 정의되어 있다.
String.java
public final class String {
// 문자열 담기
private final char[] value; // Java 버전 8 이하
private final byte[] value; // Java 버전 9 이상
// String 메소드
public int length() {...}
public String concat(String str) {...}
...
...
}
여러 개의 속성과 기능이 정의되어 있다.
String 클래스의 value 멤버 필드
String 내부에서 실제 문자열을 사용하고 데이터도 함께 담겨있다.
개발자가 다루기가 불편한 char[]
클래스를 편리하게 문자열을 이용할 수 있다.