문자형(char)의 형(type) 변환에 관하여

2022. 2. 14. 15:33JAVA

728x90

먼저 3가지의 코드를 비교해보도록 하자.

package study_java;

public class CharToInt {

	public static void main(String[] args) {
		char ch ='A';
		int a = 65;
		char ch1 = a; //오류
		System.out.println(ch1);

	}

}

실행한다면 오류가 난다.

 

package study_java;

public class CharToInt {

	public static void main(String[] args) {
		char ch ='A';
		int a = 65;
		char ch1 = 65;
		System.out.println(ch1);

	}

}

실행시 콘솔창에 A가 나온다.

 

package study_java;

public class CharToInt {

	public static void main(String[] args) {
		char ch ='A';
		int a = 65;
		char ch1 = (char)a;
		System.out.println(ch1);

	}

}

마찬가지로 실행시에 콘솔창에 A가 나온다.

 

이를 이해하기 위해서는 정수타입, 문자타입, 그리고 형 변화에대해서 이해를 해야한다.

 

구분 데이터타입 사용 메모리
정수 타입 byte 1byte
short 2byte
int 4byte
long 8byte
문자 타입 char 4byte

정수형 중에서는 int형이 기본 자료형이다.

char형은 문자를 내부적으로 정수값으로 저장하므로 정수형과 밀접한 관계가 있다.

 

 

형 변환에는 자동 타입변환과 강제 타입변환이 있다.

 

1.자동 타입변화는 작은 크기의 데이터 타입을 큰 크기의 데이터 타입으로 변환하는 행위를 말한다.

byte < short < int < long < float < double

(float과 double은 실수 타입이다.)

 

자동 타입변환에서 예외가 있다.

char형 2byte의 크기이지만 char의 범위는 음수가 저장될 수 없다. 때문에 음수가 저장될 수 있는 byte타입을 char타입으로 자동 변환 시킬 수 없다.

 

2. 강제 타입변환은 큰 크기의 데이터 타입에서 작은 크기의 데이터 타입으로 변환하는 행위를 말한다.

강제 타입 변환은 원래 값이 보존되지 않는다. 또한 '( )' 캐스트 연산자(현변환 연산자)를 사용해야한다.

예를 들어 double a =3.14;

int b = (int)a;

b 는 정수 부분인 3만 저장된다.

 

package study_java;

public class CharToInt {

	public static void main(String[] args) {
		char ch ='A';
		int a = 65;
		char ch1 = 65;
		System.out.println(ch1);

	}

}

자바에서 정수는 기본적으로 int형으로 되어집니다.

char ch1 = 65;에서 65라는 정수 자체는 int값입니다.

자동 타입변환에 따르면 int형이 char형으로 변환하는 것은 불가능하다.

하지만 자바에서는 정수 리터럴을 변수에 담는 것이 허용됩니다.

(리터럴이라는 것은 값(데이터) 그 자체를 뜻 합니다.)

package study_java;

public class CharToInt {

	public static void main(String[] args) {
		char ch ='A';
		int a = 65;
		char ch1 = a; //오류
		System.out.println(ch1);

	}

}

하지만 int a =65;와같이 int타입 변수에 명시를 해주면 자바에서는 자동 타입변환에따라서 char ch1 = a;는 허용이 되지 않는다.

package study_java;

public class CharToInt {

	public static void main(String[] args) {
		char ch ='A';
		int a = 65;
		char ch1 = (char)a;
		System.out.println(ch1);

	}

}

따라서, char 타입변수에 정수리터럴 또는 문자리터럴을 넣을 수는 있지만 이미 타입이 명시된 int형 변수를 담을 때에는 케스팅을 사용해야합니다.

 

이상입니다.

728x90