라봉이의 개발 블로그

java의 정석 9강. java.lang 패키지(하) 본문

Java/Java의 정석 읽고 정리

java의 정석 9강. java.lang 패키지(하)

Labhong 2018. 6. 11. 16:47
반응형

3. StringBuffer클래스

3.1 StringBuffer클래스의 특징



StringBuffer클래스는 지정된 문자열 변경이 가능하다. 내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며, StringBuffer인스턴스를 생성할 때 그 크기를 지정할 수 있다.

버퍼의 크기를 적절하게 정해주지 않으면 만약 문자열의 크기가 버퍼의 크기를 넘어서게 되면 버퍼 크기를 늘려주는 작업을 추가로 해야하기 때문에 작업효율이 떨어진다.



3.2 StringBuffer클래스의 생성자


public StringBuffer(int length) {
    value = new char[length];
    shared = false;
}

public StringBuffer() {
    this(16);
}

public StringBuffer(String str) {
    this(str.length() + 16);
    append(str);
}

위의 코드를 보면 알 수 있듯이 기본 버퍼의 크기는 16이란 것을 알 수 있다.



3.3 StringBuffer인스턴스의 비교


StringBuffer클래스는 equals메서드를 오버라이딩하지 않아서 StringBuffer클래스의 equals메서드를 사용해도 등가비교연산자(==)와 같은 결과를 얻는다.

반면에 toString()은 오버라이딩되어 있어서 인스턴스가 담고있는 문자열을 반환한다.

그래서 StringBuffer인스턴스에 담긴 문자열을 비교하기 위해서는 StringBuffer인스턴스에 toString()을 호출해서 String인스턴스를 얻은 다음, 여기에 equals메서드를 사용해서 비교해야한다.

public class Main {
    public static void main(String[] args) {
        StringBuffer sb1 = new StringBuffer("abc");
        StringBuffer sb2 = new StringBuffer("abc");

        if(sb1 == sb2)
            System.out.println("sb1 == sb2 ? true");
        else
            System.out.println("sb1 == sb2 ? false");

        if(sb1.equals(sb2))
            System.out.println("sb1.equals(sb2) ? true");
        else
            System.out.println("sb1.equals(sb2) ? false");

        String s1 = sb1.toString();
        String s2 = sb2.toString();

        if(s1.equals(s2))
            System.out.println("s1.equals(s2) ? true");
        else
            System.out.println("s1.equals(s2) ? false");
    }
}

출력 결과:

sb1 == sb2 ? false

sb1.equals(sb2) ? false

s1.equals(s2) ? true



3.4 StringBuffer클래스의 생성자와 메서드


생성자:

- StringBuffer()

- StringBuffer(int length)

- StringBuffer(String str)


메서드:

- StringBuffer append(anything): 매개변수로 입력된 값을 문자열로 변환하여 인스턴스의 문자열 뒤에 덧붙인다.

- int capacity(): StringBuffer인스턴스의 버퍼 크기를 반환한다.

- char charAt(int index): index위치의 문자를 반환

- StringBuffer delete(int start, int end): 시작 위치부터 끝 위치 사이에 있는 문자를 제거한다. 단, 끝 위치 문자는 제외

- StringBuffer deleteCharAt(int index): 지정된 위치의 문자를 제거

- StringBuffer insert(int pos, anything): 두 번째 매개변수로 받은 값을 문자열로 변환하여 지정된 위치pos에 추가한다.

- int length(): 인스턴스에 저장된 문자열의 길이를 반환

- StringBuffer replace(int start, int end, String str): 지정된 범위의 문자들을 주어진 문자열로 바꾼다. end 위치는 포함되지 않음.

- StringBuffer reverse(): 문자열 순서를 거꾸로 바꾼다.

- void setCharAt(int index, char ch): 지정된 위치index의 문자를 문자ch로 바꾼다.

- void setLength(int newLength): 지정된 크기로 문자열의 길이를 변경한다. 문자열 크기를 더 늘리면 나머지는 공백으로 채워진다.

- String substring(int start[, int end]): 지정된 범위 내의 문자열을 String으로 뽑아서 반환한다.



4. Math클래스

4.1 Math클래스


Math클래스는 기본적인 수학계산에 유용한 메서드로 구성되어있다.



5. wrapper클래스

5.1 wrapper클래스


기본형(primitive type) 변수도 때로는 객체로 다루어져야하는 경우가 있다. 예를 들면, 매개변수로 객체를 요구할 때, 기본형 값이 아닌 객체로 저장해야할 때, 객체간의 비교가 필요할 때 등등 객체로 변환을 해야하는데 이 때에 사용되는 것이 wrapper클래스이다.


int와 char를 제외한 모든 기본형 타입은 wrapper 클래스와 이름이 같다.

int -> Integer

char -> Character


public class Main {
    public static void main(String[] args) {
        Integer i1 = new Integer(100);
        Integer i2 = new Integer(100);

        System.out.println("i1==i2 ? " + (i1==i2));
        System.out.println("i1.equals(i2) ? " + i1.equals(i2));
        System.out.println("i1.toString() = " + i1.toString());

        System.out.println("MAX_VALUE = " + Integer.MAX_VALUE);
        System.out.println("MIN_VALUE = " + Integer.MIN_VALUE);
        System.out.println("SIZE = " + Integer.SIZE + " bits");
        System.out.println("TYPE = " + Integer.TYPE);
    }
}

출력 결과:

i1==i2 ? false

i1.equals(i2) ? true

i1.toString() = 100

MAX_VALUE = 2147483647

MIN_VALUE = -2147483648

SIZE = 32 bits

TYPE = int


wrapper클래스들은 모두 equals()가 오버라이딩되어 있어서 주소값이 아닌 객체가 가지고 있는 값을 비교한다. 또한 MAX_VALUE, MIN_VALUE 등등 static 멤버를 공통적으로 가지고 있다.

반응형
Comments