string

[Java] 자바 문자열

2023. 3. 12. 23:26

String

String은 immutable하다. immutable과 mutable

따라서 수정을 필요로 할땐 이미 존재하는 객체이더라도 새로운 객체를 생성하여 재할당 하기 때문에 비효율 적인 부분이 존재한다. 이를 해결하기 위해 mutable한 Stringbuilder & StringBuffer에 대해 알아본다.

  • 참고사항
String a = "123";
String b = a;
String c = new String(b);

if(a==b){
    System.out.println("a, b같은 객체");
}
if(a==c){
    System.out.println("a, c같은 객체");
}
if(b==c){
    System.out.println("b,c 같은 객체");
}

//result a, b같은 객체

Type이 String인 객체들끼리 == 비교를 통해 같은 객체인지 확인할수있다. 이때 객체가아닌 String간 내용이 같은지 비교할땐 equals를 사용한다.

참고사항: length배열의 길이,length() 문자열의 길이 ,size() Collections의 size




StringBuilder & StringBuffer

Stringbuilder & StringBuffer는 muable하다 즉 수정을 하더라도 문자열을 추가할때마다 객체가 재할당 되는 형태가 아니다.

그렇다면 Stringbuilder & StringBuffer의 차이점은 무엇인가?

Stringbuilder & StringBuffer 의 가장큰 차이점은 동기화의 유무이다.

 

즉 StringBuilder는 synchronized 하지 않다. 즉, 스레드로부터 안전하지 않다. 둘 이상의 스레드가 동시에 StringBuilder 인스턴스에 액세스하면 결과를 예측할 수 없다. 하지만 StringBuilder는 동기화 오버헤드를 발생시키지 않기 때문에 일반적으로 StringBuffer보다 빠르다.

 

반면에 StringBuffer는 synchronized 하다. 즉 스레드로부터 안전하다. 여러 스레드가 동시에 StringBuffer 인스턴스에 액세스하면 액세스가 동기화되고 결과를 예측할 수 있다. 그러나 synchronized 하다는 특성때문에 StringBuilder보다 느리다.

+ Recent posts