Sb는 본질적으로 StringBuffer 객체입니다. sb+""는 sb.toString()을 호출하여 ""로 연결합니다. 또한 StringBuffer는 스레드로부터 안전합니다. 그 이유는 Jdk의 String 클래스가 final 타입인데 왜 최종 수정 버전이 String str = s + ""; 형태로 존재할 수 있는 걸까요? jvm에서는 +가 실행될 때마다 임시 String 객체가 생성되고 String str = a + b가 실제로 표시됩니다. 그런데 스플라이싱할 문자열이 너무 많으면 많은 String 개체가 생성되므로 gc의 오버헤드가 증가하므로 이러한 빈번한 작업은 문자열 스플라이싱을 직접 사용하지 않고 StringBuilder 또는 StringBuffer를 사용합니다.
Sb는 본질적으로 StringBuffer 객체입니다. sb+""는 sb.toString()을 호출하여 ""로 연결합니다. 또한 StringBuffer는 스레드로부터 안전합니다. 그 이유는 Jdk의 String 클래스가 final 타입인데 왜 최종 수정 버전이 String str = s + ""; 형태로 존재할 수 있는 걸까요? jvm에서는 +가 실행될 때마다 임시 String 객체가 생성되고 String str = a + b가 실제로 표시됩니다. 그런데 스플라이싱할 문자열이 너무 많으면 많은 String 개체가 생성되므로 gc의 오버헤드가 증가하므로 이러한 빈번한 작업은 문자열 스플라이싱을 직접 사용하지 않고 StringBuilder 또는 StringBuffer를 사용합니다.