문자, 문자열 리터럴, 문자열 결합
문자와 문자열
char ch = 'A';
char 변수타입에 홑따옴표를 이용하여 하나의 문자를 저장할 수 있다.
char ch = 'AB'; // 에러
이렇게 홑따옴표 안에 두개 이상의 문자를 넣으면 에러가 발생한다.
String s = "ABC";
둘 이상의 문자는 위와 같이 큰따옴표로 묶어주어야 한다.
String s = "ABC"; 와 같이 문자가 연속적으로 이어져 있는 것을 "문자열" 또는 "문자열 리터럴" 이라고 하고, 문자열을 저장하려면 변수의 타입이 String이어야 한다.
String s1 = "AB";
String s2 = new String("AB");
String은 원래 Java에서 제공하는 클래스이며 문자열을 다룰 때 사용한다.
원래 클래스는 예시의 두번째 줄과 같이, 'new'연산자를 사용하여 객체를 생성해야하는데, 문자열은 워낙 자주 쓰이기 때문에 String 클래스만 특별하게 기본형 변수에 값을 저장하는 것과 같은 표현을 허용한다.
원래 String s1 = "AB";에서 참조변수 s1에는 문자열 "AB"의 주소가 저장되는데, 단순히 변수 s1에 문자열 "AB"가 저장된다고 생각해도 좋다. 어쩃든 위의 두 문장은 거의 같다. 대부분 위의 문장을 사용한다.
두 문장은 아주 약간의 차이가 있다. 그 차이에 대해서는 9장에서 알아보도록 하겠다.
String s = "A";
원래 문자열은 연속된 여러 문자를 의미하는 것이지만, 문자가 하나이거나 심지어는 문자가 하나도 없어도 된다.
String s = ""; // 빈 문자열
큰따옴표 안에 아무런 문자가 없는 문자열을 "빈문자열"이라고 한다.
char ch = ''; // 에러
반면에 홑따옴표 안에는 아무론 문자를 넣지 않으면 에러가 발생한다.
String s1 = "A" + "B"; // "AB"
위의 문장은 두 문자열을 하나로 결합하라는 뜻이다. 그래서 변수 s1에는 문자열 "AB"가 저장된다.
문자열과 숫자도 결합 할 수 있는데,
"" + 7 → "" + "7" → "7"
빈 문자열과 숫자 7을 더하면, 숫자가 문자열로 변환된 다음에 문자열과 결합해서 문자열 "7"이 된다.
이때 주의 해야 할 것은, 문자열 결합은 왼쪽에서 오른쪽으로 진행되기 때문에, 순서에 따라 전혀 다른 결과가 나올 수 있다.
"" + 7 + 7 → "7" + 7 → "7" + "7" → "77"
7 + 7 + "" → 14 + "" → "14" + "" → "14"
결론적으로 정리해보면 아래와 같다.
- 문자열 + any type → 문자열
- any type + 문자열 → 문자열