티스토리 뷰
java String vs StringBuffer 비교
안녕하세요.
java에 빼놓을수 없는 String Class 가장 빈번하게 쓰이는 클래스라고 할수 있습니다.
일단 이 클래스의 특징을 살펴보겠습니다.
보통 java class 를 사용하려면 객체를 생성해야 합니다.
Test test = new Test();
이런식으로 new 을 이용하여 객체를 생성해줘야 하지만 String은 기본형처럼
객체를 생성하지 않고 사용할수 있습니다.
String str = "클래스를 바로 사용가능";
물론 아래처럼 new 를 이용해서 사용할수도 있습니다.
String str = new String("new 이용하여 사용가능");
그럼 StringBuffer 클래스의 사요방법을 알아보겠습니다.
StringBuffer sb = new StringBuffer();
반드시 new 연산자를 이용하여 객체를 생성후 사용가능합니다.
sb변수가 생성되면
append 메소드를 이용하여 계속 문자열을 추가할수 있습니다.
그리고 append이외에 다양한 메소드를 제공하고 있습니다.
append 메소드 사용법
sb.append("test");
sb.appedd("test1");
System.out.println("StringBuffer sb -> " + sb);
결과값
StringBuffer sb -> testtest1
자주 사용하는 메소드 setLength
sb에 있는 문자열을 전부 클리어시키는 효과를 가지고 있습니다.
sb.append("leesejin");
sb.setLength(0);
System.out.println("StringBuffer sb -> " + sb);
결과값
--------------------------------------------
StringBuffer sb ->
-----------------------------------------------
길이를 0으로 지정하면 sb에는 아무값도 가지지 않는 빈문자열만 가지게 됩니다.
출력하면 아무값도 찍히지 않게 됩니다.
이번에는 String 을 이용하여 문자열을 추가해보겠습니다.
String sb = "";
sb+= "test";
sb+= "test1";
System.out.println("sb -> " + sb);
결과값
sb -> testtest1
결과값은 둘다 같아서 원하는 결과값을 얻을수가 있습니다.
하지만 여기서 중요한건 바로 속도 차이죠.
StringBuffer 클래스를 사용하게 되면 객체를 한번 생성하게 되지만
String같은 경우
+= 연산자를 사용할때마다 매번 String클래스 객체를 생성하게 됩니다.
+= 연산자가 몇번 안된다면 속도 차이는 미비하겠지만
만약 += 연산자가 자주 하게 된다면 아무래도 속도차이가 날수밖에 없습니다.
아래 예제 소스를 보겠습니다.
---------------------------------------
public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
long startTime = System.currentTimeMillis();
for (int i = 0; i < 9999; i++) {
sb.append("i------------->" + i);
}
long endTime = System.currentTimeMillis();
System.out.println("StringBuffer 실행 시간 " + (endTime - startTime));
String str = "";
long startTime1 = System.currentTimeMillis();
for (int i = 0; i < 9999; i++) {
str += "i------------->" + i;
}
long endTime1 = System.currentTimeMillis();
System.out.println("String 실행 시간 " + (endTime1 - startTime1));
}
}
-----------------------------------------
-- 결과값
StringBuffer 실행 시간 10
String 실행 시간 3510
결과값을 보시면 아시겠지만 StringBuffer 를 사용했을때는 실행시간이 10이 걸렸지만
String을 사용했을때에는 3510 이 걸렸습니다.
여기서 for문의 숫자를 늘리면 늘릴수록 두 클래스의 속도차이는 더 벌어지게 됩니다.
그러므로 가급적 문자열 작업이 필요할때는 String보다는 StringBuffer 클래스를 사용하시는게 훨씬 효과적입니다.
참고로 java 에서는 문자열을 비교할때 ==를 사용하면 안됩니다.
문자열 비교는 equals메소드를 사용해야 합니다.
Stirng a = "bbb";
String b = "bbb";
a와 b가 같은 문자열을 가지고 있는지 비교하려면 반드시
if(a.equals(b)) {
System.out.println("a와 b가 같다");
}
자바 처음 접하시는 분들은 a == b 이런식으로 한다면 원하는 결과값을 얻을수가 없습니다.
if(a ==b) {
System.out.println("a와 b가 같다");
}
자바에서는 == 연산자는 주소값을 비교하는겁니다.
a 변수가 선언했을때의 주소와 b변수가 선언했을때의 주소는 당연히 다르겠죠.
여기까지 java String vs StringBuffer 비교에 대해 알아봤습니다.
'JAVA(프로그래밍)' 카테고리의 다른 글
java substring 문자열 자르기 (0) | 2018.07.26 |
---|---|
java split() , join() 알아보자 (0) | 2018.07.26 |
java Properties 사용하기 (0) | 2018.07.25 |
java TreeMap 클래스 사용법 (0) | 2018.07.25 |
java HashMap 대신 순서대로 사용하려면 LinkedHashMap를 사용하자. (0) | 2018.07.24 |
- Total
- Today
- Yesterday
- 자바 랩퍼
- java Vector
- java substring
- File Class
- java StringBuffer
- 자바
- 자바 패키지
- java wrapper
- java iterator
- java텍스트파일저장
- 객체파일저장
- java문자열저장
- java 네트워크
- java wrapper class
- Java
- java문자열자르기
- java tihs
- java replaceAll
- java treemap
- java 메모장
- java Properties
- java배열
- linkHashMap
- java File
- java ArrayList
- java LinkedHashMap
- java 소켓
- java 노트패드
- java join
- java Enumeration
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |