문자 자료형을 정리할 것이다. 순서대로 정리한다고 생각하지만, 글을 워낙 두서없이 적어서 나 말고 다른 사람들이 본다면 조금 죄송하다..
값이 헷갈릴 수 있어서 디버깅을 통해 각 변수마다 담겨있는 값을 코드 옆에다가 주석으로 표시할 것이다.
short)와 동일 // 각 문자는 상응하는 정수를 가짐
char ch1 = 'A'; // 'A' : 65
char ch2 = 'B'; // 'B' : 66
char ch3 = 'a'; // 'a' : 97
char ch4 = 'a' + 1; // 'b' : 98
char ch5 = '가'; // '가' : 44032
char ch6 = '가' + 1;
char ch7 = '가' + 2;
char ch8 = '가' + 3;
char ch9 = '나'; // '나' : 45208
int ch1Int = (int) ch1; // ch1Int : 65
int ch9Int = (int) ch9; // ch9Int : 45208
// 문자 리터럴과 숫자, 유니코드로 표현 가능
char ch10 = 'A';
char ch11 = 65; // A로 인식
char ch12 = '\u0041';
위에 코드처럼 문자자료형을 int형으로 형변환하여 int형 변수에 넣어줄 수 있고, 또한 문자자료형인 char자료형에 숫자를 대입하면 그 수에 상응하는 문자로 인식하기도 한다.
이제 아래에서는 숫자와 문자자료형간에 형변환에 대해 조금 더 자세하게 알아볼 것이다.
char ch_a1 = 'A'; // ch_a1 : 'A'
int int_a1 = (int) ch_a1; // int_a1 : 65
int int_a1 = ch_a1; // int_a1 : 65
// 정수값을 얻는 다른 방법들 - 정수값과 연산하기
int int_a2 = ch_a1 + 0; // int_a2 : 65
int int_a3 = ch_a1 - 0; // int_a3 : 65
// 💡 리터럴에 더할 때와 변수에 더할 때 반환 자료형이 다름
char ch_a2 = 'A' + 1; // ch_a2 : 'B'
//char ch_a3 = ch_a1 + 1; // ⚠️ 불가
int int_a4 = ch_a1 + 1; // ch_a1 : 'A'
첫줄과 두번째 줄의 코드처럼 (int) 를 붙여서 명시적 형변환을 할 수도 있고, 세번째 줄 코드처럼 묵시적 형변환도 가능하다. 아래에서 두번째 있는 불가 표시가 되어있는 코드를 보자. 대부분의 형변환이 자유롭게 가능한데, 저렇게 문자변수에다가 정수를 더하면 char자료형에 들어갈 수 없고 int자료형에만 들어갈 수 있게 된다. 이 부분은 따로 명시적으로 형변환 해주면 되기 때문에 그냥 알아만 두자.
// 💡 int 1과 char '1'은 다름! - 문자로서의 '1'
// - 해당 문자의 정수값 확인
char ch_b1 = '1'; // ch_b1 : '1' 49
char ch_b2 = '2'; // ch_b2 : '2' 50
// ⚠️ 숫자 문자에 사칙연산 - 문자 번호 기준 결과 반환
char ch_b3 = '1' + '2'; // ch_b3 : 'c' 99
int int_b4 = ch_b1 + ch_b2; // int_b4 : 99
만약 문자 '1'을 숫자 1 로 변환하고 싶으면 어떻게 해야할까.
// 💡 아래의 기능으로 문자가 의미하는 정수로 변환
int int_d1 = Character.getNumericValue('1'); // int_d1 = 1
int int_d2 = Character.getNumericValue('2'); // int_d2 = 2
위와 같이 Character래퍼클래스를 사용해도 되고, 아니면 아스키값의 차이를 이용해서 숫자를 반환할 수 있다.
int int_d1 = '1' - '0'; // int_d1 = 1
int int_d2 = '5' - '0'; // int_d2 = 5
위에 코드를 보면 문자 1과 문자 0의 정수값 차이는 1이다. 따라서 두 문자를 빼고 정수변수에 담아주면 숫자 1이 남는 것이다. 아래도 마찬가지이다.
// ⚠️ 빈 문자는 사용 불가, 공백(space)는 가능
// - 이후 배울 문자열(String)과의 차이
char empty = ''; // 불가
String emptyStr = "";
char space = ' ';
위와 같이 '' 작은 따옴표를 두개 붙여서 나타내는 것은 char 자료형에서는 불가하다. 또한 따옴표 사이에 공백을 포함해서 ' ' 이렇게 표현하는 것은 스페이스로 인식한다. 따라서 빈 문자를 표현하고 싶으면 char 자료형 대신 String 자료형을 사용하여 위와 같이 나타내면 된다.
// 같은 문자열인지 여부 반환
boolean bool1 = 'A' == 'A'; // true
boolean bool2 = 'A' == '가'; // false
// 숫자와 비교할 시 해당 정수값 기준으로
boolean bool3 = 'A' == 65; // true
boolean bool4 = 'A' > 64.0; // true
boolean bool5 = 'A' > 66f; // false
// 사전순 상 먼저 오는 쪽이 작음
boolean bool6 = 'A' < 'B'; // true
boolean bool7 = '가' > '나'; // false