String처럼 문자형 배열(char[])을 내부적으로 가지고 있다.
String과 다르게 내용을 변경할 수 있다.(mutable)
StringBuffer sb = new StringBuffer("abc");
sb.append("123");
System.out.println(sb);
abc123
배열은 길이 변경 불가. 공간이 부족하면 새로운 배열을 생성해야 한다.
1. 새로운 배열 생성
2. 내용 복사
3. 참조 변경
StringBuffer는 String과 달리 내용 변경이 가능하다.
append()
- 추가, delete()
- 삭제, insert()
- 삽입 등의 메서드는 반환 타입이 StringBuffer 이다. StringBuffer sb = new StringBuffer("abc");
sb.append("123").append("aaa");
StringBuffer는 String과 다르게 equals()가 오버라이딩되어 있지 않다.(주소 비교)
StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");
System.out.println(sb == sb2);
System.out.println(sb.equals(sb2));
false
false
String s = sb.toString(); // sb를 String으로 변환
String s2 = sb2.toString();
System.out.println(s.equals(s2));
true
: 16개 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스를 생성한다.
StringBuffer sb = new StringBuffer();
sb = ""
: 지정된 개수의 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스를 생성한다.
StringBuffer sb = new StringBuffer(10);
sb = ""
: 지정된 개수의 값(str)을 갖는 StringBuffer 인스턴스를 생성한다.
StringBuffer sb = new StringBuffer("abc");
sb = "abc";
: 매개변수로 입력된 값을 문자열로 변환하여 StringBuffer 인스턴스가 저장하고 있는 문자열의 뒤에 추가한다.
StringBuffer sb = new StringBuffer("abc");
sb.append(true).append(123).append("ABC");
sb = "abctrue123ABC"
: StringBuffer 인스턴스의 버퍼 크기(char[] 배열의 길이)를 알려준다. length()는 버퍼에 담긴 문자열의 길이를 알려준다.
StringBuffer sb = new StringBuffer(100);
sb.append("1234");
int bufferSize = sb.capacity();
int stringSize = sb.length();
bufferSize = 100
stringSize = 4
: 지정된 위치(index)에 있는 문자를 반환한다.
StringBuffer sb = new StringBuffer("abc");
char ch = sb.charAt(2);
ch = 'c'
: 시작 위치(start)부터 끝 위치(end) 사이에 있는 문자를 제거한다. 끝 위치의 문자는 제외
StringBuffer sb = new StringBuffer("0123456");
sb.delete(3,6);
sb = "0126"
: 지정된 위치(index)의 문자를 제거한다.
StringBuffer sb = new StringBuffer("0123456");
sb.deleteCharAt(3);
sb = "012456"
: 두 번째 매개변수로 받은 값을 문자열로 변환하여 지정된 위치(pos)에 추가한다. pos는 0부터 시작
StringBuffer sb = new StringBuffer("0123456");
sb.insert(4,'.');
sb = "0123.456"
: StringBuffer 인스턴스의 저장되어 있는 문자열의 길이를 반환한다.
StringBuffer sb = new StringBuffer("0123456");
int len = sb.length();
len = 7
: 지정된 범위(start <= x < end)의 문자들을 주어진 문자열(str)로 바꾼다.
StringBuffer sb = new StringBuffer("0123456");
sb.replace(3, 6, "AB");
sb = "012AB6"
: StringBuffer 인스턴스에 저장되어 있는 문자열의 순서를 거꾸로 나열한다.
StringBuffer sb = new StringBuffer("0123456");
sb.reverse();
sb = "6543210"
: 지정된 위치(index)의 문자를 주어진 문자(ch)로 바꾼다.
StringBuffer sb = new StringBuffer("0123456");
sb.setCharAt(5, 'a');
sb = "01234a6"
: 지정된 길이로 문자열의 길이를 변경한다. 길이를 늘리는 경우 나머지 빈 공간을 널문자 '\u0000'로 채운다.
StringBuffer sb = new StringBuffer("0123456");
sb.setLength(5);
StringBuffer sb2 = new StringBuffer("0123456");
sb2.setLength(10);
sb = "01234"
sb2 = "0123456 "
: StringBuffer 인스턴스의 문자열을 String으로 변환
StringBuffer sb = new StringBuffer("0123456");
String str = sb.toString();
str = "0123456"
: 지정된 범위 내의 문자열을 String으로 뽑아서 반환한다. end를 안쓰면 start 부터 끝까지 뽑아서 반환한다.
StringBuffer sb = new StringBuffer("0123456");
String str = sb.substring(3);
String str2 = sb.substring(3, 5);
str = "3456"
str2 = "34"
StringBuffer는 동기화되어 있다. 멀티 쓰레드에 안전(thread-safe)
멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능이 저하된다. 이 때, StringBuffer 대신 StringBuilder를 사용하면 성능이 향상된다.
수학 관련된 static 메서드의 집합
round()로 원하는 소수점 아래 세 번째 자리에서 반올림하기
원래 값에 100을 곱한다.
90.7552 * 100 = 9075.52
Math.round() 사용 (round()는 원래 소수점 아래 첫 번째 자리에서 반올림)
Math.round(9075.52) = 9076
다시 100.0으로 나눈다.
9076 / 100.0 = 90.76
: 주어진 값의 절대값을 반환한다.
int i = Math.abs(-10);
double d = Math.abs(-10.0);
i = 10
d = 10.0
: 주어진 값을 올림하여 반환한다.
double d = Math.ceil(10.1);
double d2 = Math.ceil(-10.1);
double d3 = Math.ceil(10.005);
d = 11.0
d2 = -10.0
d3 = 11.0
: 주어진 값을 버림하여 반환한다.
double d = Math.floor(10.1);
double d2 = Math.floor(-10.1);
double d3 = Math.floor(10.005);
d = 10.0
d2 = -11.0
d3 = 10.0
: 주어진 두 값을 비교하여 큰 값을 반환한다.
int i = Math.max(-10, -9);
double d = Math.max(9.5, 9.6);
i = -9
d = 9.6
: 주어진 두 값을 비교하여 작은 값을 반환한다.
int i = Math.min(-10, -9);
double d = Math.min(9.5, 9.6);
i = -10
d = 9.5
: 0.0 ~ 1.0 범위의 임의이 double 값을 반환한다. 1.0은 포함 x
double d = Math.random();
int i = (int)(Math.random() * 10) + 1;
0.0 <= d < 1.0
1 <= i < 11
: 주어진 double 값과 가장 가까운 정수 값을 double 형으로 반환한다. 단, 두 정수의 가운데 있는 값(1.5, 2.5 등)은 짝수를 반환한다.
double d = Math.rint(1.2);
double d2 = Math.rint(1.6);
double d3 = Math.rint(2.5);
double d4 = Math.rint(3.5);
d = 1.0
d2 = 2.0
d3 = 2.0
d4 = 4.0
: 소수점 첫 번째 자리에서 반올림한 정수값(long)을 반환한다. 단, 두 정수의 가운데 있는 값은 항상 큰 값을 반환한다.
long l = Math.round(1.2);
long l2 = Math.round(1.6);
long l3 = Math.round(2.5);
long l4 = Math.round(3.5);
double d = 90.7557;
double d2 = Math.round(d * 1000) / 1000.0;
l = 1
l2 = 2
l3 = 3
l4 = 4
d = 90.7557
d2 = 90.756
Math.round(d * 1000) / 1000.0;
: 소수점 네 번째 자리에서 반올림하는 방법