티스토리 뷰

Goal 

 - Java에서 제공되는 String 클래스의 특징에 대해 알아본다

 - Wrapper 클래스에 대해 사진을 통해 간단히 알아본다 

 

1. String 클래스

1-1 힙메모리와 상수풀

String str1 = new String("abc"); //인스턴스로 생성됨
String str2 = "abc"; //리터럴이 모여있는 상수풀에 있는 문자열을 가르킴 

 1-2 String은 immutable

 - 한번 선언되거나 생성된 문자열을 변경할 수 없음

 - String 클래스의 concat() 메서드 혹은 "+"를 이용하여 String을 연결하는 경우 문자열은 새로 생성됨.

 

1) System.identityHashCode를 활용하여 java 주소값 확인. 

 - java와 android를 concat하고 다시 java 변수에 저장하면

 - 기존에 생성되어 "java"값을 담고있는 참조변수 java는 가비지 메모리가 됨. 

 - 즉, 새로운 참조변수 java를 생성함. 

public class StringTest2 {
    
    public static void main(String[] args) {
        
        String java = new String("java");
        String android = new String("android");
        System.out.println(System.identityHashCode(java));
        
        java = java.concat(android);
        System.out.println(System.identityHashCode(java));
        
        System.out.println(java);
        
    }


}

 

 

1-3 StringBuffer, StringBuilder

- String 작업시에, immutable한 속성 때문에, String을 연결할 때, 이전의 String은 가비지 메모리되어 메모리의 낭비를 초래함 

 - 가변적인 char[] 배열을 멤버변수로 가지고 있는 클래스 StringBuffer와 StringBuilder를 사용함 (API를 확인하면, 변수가 final이 아닌것을 확인할 수 있음)

 - StringBuffer는 멀티 쓰레드프로그래밍에서 동기화(Synchronization)이 보장됨, 단일  쓰레드 프로그래밍에서는 StringBuilder를 사용하는것이 더 좋음. 

 - toString() 메서드로 String 반환   

 

1) StringBuilder 사용 예시

public class StringBuilderTest {

    public static void main(String[] args) {
        
        String java = new String("java");
        String android = new String("android");
        
        StringBuilder buffer = new StringBuilder(java);
        buffer.append("android"); //append된 buffer값과 처음 생성된 buffer값의 주소값은 같음.
        java = buffer.toString(); //String 반환
        
        System.out.println(java);

    }

}

 

2. Wrapper 클래스

 - 기본자료형에 대한 클래스 

 

 

 

'Java > Java 올인원 패키지' 카테고리의 다른 글

23. 컬렉션 프레임워크 (Java)  (0) 2020.03.19
22. 제네릭 (Java)  (0) 2020.03.19
20. Object 클래스 (Java)  (0) 2020.03.18
19. 인터페이스 (Java)  (0) 2020.03.18
18. 템플릿 메서드 (Java)  (0) 2020.03.17
댓글