concat과 +
String 클래스는 자바에서 매우 특이하게 관리되는 레퍼런스 타입 오브젝트이다. 내부적으로 최적화를 해 두었고 관리되는 방식이 참으로 독특하다. 다음 코드를 보자.
1 | String string1 = "song"; |
위 두 코드는 같은 주소를 가리킨다. 이렇게 특이한 방식으로 관리되는 String의 concat() 메소드와 + 연산자를 알아보려고 한다.
concat
concat 메소드는 다른 문자열의 끝에 하나의 문자열을 연결한다. 이 메소드는 메소드에 전달 된 문자열 값이 문자열 끝에 추가된 문자열을 반환한다.
+
+ 연산자는 양쪽의 문자열을 연결하는데 사용된다.
difference of concat and +
Number of arguments the concat method and + operator takes
- concat 메소드는 문자열의 한 인수만 취하고 다른 문자열과 연결한다.
- + 연산자는 임의의 수의 인수를 취하고 모든 문자열을 연결한다.
Type of arguments
- concat 메소드는 문자열 인수만 취한다. 인수에 다른 유형이 주어지면 오류가 발생한다.
- + 연산자는 모든 유형을 취하여 문자열 유형으로 변환한 다음 문자열을 연결한다.
concat method raises NullPointerException
- concat 메소드는 문자열이 null과 연결될 때 에러를 던진다.
- + 연산자는 문자열이 null과 연결될 때 예외를 발생시키지 않는다.
Creates a new String Object
- concat 메소드는 문자열 길이가 0보다 큰 경우 두 문자열을 연결하고 새 문자열 객체만 반환한다. 그렇지 않다면 동일한 객체를 반환한다.
- + 연산자는 문자열 길이에 관계없이 매번 새로운 문자열 객체를 생성한다.
Performance
- 위의 내용을 이해했다면 concat 메소드가 우수하다는 것을 알 수 있다.