StringBuilder(), StringBuffer

StringBuilder(), StringBuffer

/*

* N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 프로그램을 작성하세요.

*

* 첫 줄에 자연수 N(3<=N<=20)이 주어집니다. 두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어집니다. 단어는 영어 알파벳으로만

* 구성되어 있습니다.

*

* N개의 단어를 입력된 순서대로 한 줄에 하나씩 뒤집어서 출력합니다.

*/

package com.bo.hyeon; import java.util.Scanner; public class Main { public String[] solution(int n, String[] str) { String[] answer = new String[str.length]; for (int i = 0; i < str.length; i++) { // String 을 변경하려면 그냥 다다닥 못하고 새로운 객체를 만들어서 변경해야한대 .. String tmp = new StringBuilder(str[i]).reverse().toString(); answer[i] = tmp; } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); String[] str = new String[n]; for (int i = 0; i < n; i++) { str[i] = kb.next(); } for (String x : T.solution(n, str)) { System.out.println(x); } } }

String 은 불변 , 값을 변경할 수 없다 !

String str = a;

str = str.concat("예시에오");

str => a : 값이 할당되어 있던 메모리 영역이 Gabage로 남아있다가 GC(garbage coillection)에 의해 사라짐

str => a예시에오 :기존의 a는 사라지고 'a예이에오' 새로운 메모리 영역

문자열 추가,수정,삭제 등이 빈번하게 발생하는 경우에 String 클래스를 사용한다면 힙메모리에 임시가비지가 생성되어 힙메모리 부족으로 성능에 좋지 않은 영향을 미침 !

그럼 어떻게 하냐?

StringBuffer나 StringBuilder를 사용

둘의 차이점?

동기화의 유무

StringBuffer 는 동기화를 지원함, 멀티쓰레드 환경에서 안전하다.

StringBuilder 는 동기화 지원안함, 단일쓰레드에서 성능은 StringBuffer보다 뛰어나다.

( 멀티쓰레드 단일쓰레드 이게 뭔 소린지 알 수가 없다.... 나중에 찾아볼 것.... )

from http://bohyeon2.tistory.com/25 by ccl(A) rewrite - 2021-10-09 18:27:35