자바의 문자열은 String 이라는 특별한 시스템 클래스의 객체다.
문자열을 손쉽게 문자 및 바이트 배열과 상호 변환 할 수 있지만
(내부적으로 char배열을 써서 문자열을 저장한다.),
분명히 서로 다른 유형으로 구분된다.
문자열에 들어있는 개별 문자는 직접 액세스 할 수 없으며(String b = "bbb"; b[2] // 이렇게 직접 접근 안되)
String클래스의 메소드를 써서 접근해야 한다. (b.at(2) 이런식)
자바 문자열은 변형 불가능하다(immutable)하다.
문자열을 조작하는 인스턴스도 사실 내부적으로는 새로운 문자열을 만들어서 반환하는 것이다.
대신 필요에 따라 String 인스턴스로 변환 될 수 있는 변형 가능한 문자열을 만들어주는
StringBuffer 와 StringBuilder 클래스가 있다.
(StringBuffer는 모든 자바 버젼에서 사용 할 수 있고, thread-safe가 보장되지만,
StringBuilder는 자바 5에서 도입되었으며 thread-safe을 보장하지 못한다)
String인스턴스에서 + 연산자를 쓰면, 내부적으로 StringBuffer인스턴스를 사용하는데, 이 + 연산자를 쓸때는
주의해서 쓰지 않으면 비효율적인 코드를 만들어 낼 가능성이 있다.
다음의 코드와 같은 원리에 대해서 기억해둘 필요가 있겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | // (1) String s = ""; for(int i = 0;i<10;i++){ s = s + i + " "; } // (2) (1)의 코드와 같다. String s = ""; for(int i = 0;i<10;i++){ StringBuffer t = new StringBuffer(); t.append(s); t.append(i); t.append(" "); s = t.toString(); } // (3) 아래와 같이 만들어 주는 것이 훨씬 효율적이다. StringBuffer b = new StringBuffer(); for(int i = 0;i<10;i++){ b.append(i); b.append(' '); } String s = b.toString(); | cs |
'JAVA' 카테고리의 다른 글
자바 리플랙션(Reflection) API (0) | 2015.08.05 |
---|---|
자바 해시맵(HashMap) (0) | 2015.08.05 |
자바가 확장한 객체지향 (0) | 2015.06.30 |
자바와 객체지향 (0) | 2015.06.30 |
자바 스레드의 이해 (0) | 2015.06.30 |