Java의 유형 캐스팅이란 무엇입니까?
데이터 유형은 수행할 수 있는 작업과 함께 저장할 수 있는 값의 유형을 지정하는 미리 정의된 값 집합입니다.타입 캐스팅이 필요한 이유는 무엇입니까?
Java에는 메모리에 다른 공간이 필요한 다양한 기본 데이터 유형이 있습니다. 이로 인해 한 데이터 유형의 값을 다른 데이터 유형에 할당하는 동안 호환성 문제가 발생할 수 있습니다. 데이터 유형이 이미 호환되는 경우 컴파일러가 자동으로 유형 변환을 수행합니다. 따라서 타입 캐스팅은 프로그램에서 다양한 데이터 유형을 처리할 때 주요 호환성 문제를 해결합니다.Java 유형 캐스팅의 유형
Java에는 두 가지 유형의 유형 캐스팅이 있습니다.- 확대 유형 캐스팅 — 암시적 또는 자동 유형 캐스팅이라고도 함
- Narrowing Type Casting - 명시적 또는 수동 유형 캐스팅이라고도 함
확폭형 주조
확장형 형변환(Widening typecasting)은 이름에서 알 수 있듯이 작은 데이터 유형을 더 큰 데이터 유형으로 확장하는 것을 의미합니다. 작은 유형을 큰 유형으로 변환하려는 경우 이러한 유형 변환을 수행합니다. 데이터 유형은 서로 호환되어야 합니다. 숫자에서 char 또는 부울 유형으로의 암시적 변환은 없습니다. Java에서는 char 및 boolean 유형이 호환되지 않습니다.
바이트 -> 짧은 -> 문자 -> int -> 긴 -> 부동 소수점 -> 더블
이러한 유형의 캐스팅은 정보 손실 없이 컴파일러에 의해 자동으로 수행됩니다. 프로그래머의 외부 트리거가 필요하지 않습니다.
예
//Automatic type conversion
public class WideningExample {
public static void main(String[] args) {
int i = 100;
System.out.println("int value: " + i);
// int to long type
long l = i;
System.out.println("int to long value: " + l);
// long to float type
float f = l;
System.out.println("int to float value: " + f);
byte b = 1;
System.out.println("byte value: " + b);
// byte to int type
i = b;
System.out.println("byte to int value: " + i);
char c = 'a';
System.out.println("char value: " + c);
// char to int type
i = c;
// prints the ASCII value of the given character
// ASCII value of 'a' = 97
System.out.println("char to int value: " + i);
}
}
산출
int 값: 100 int에서 long 값: 100 int에서 float 값: 100.0 byte 값: 1 byte에서 int 값: 1 char 값: char에서 int 값: 97
설명
위의 코드에서는 컴파일러가 자동으로 수행하는 확장형 형변환을 보여주었습니다. 우선 int , byte 및 char 에 값을 할당했습니다 . 그런 다음 int 값을 long 및 float 에 할당했는데 둘 다 int 보다 큽니다 . 또한 byte 및 char 값을 int 에 할당했습니다 . byte 및 char 는 모두 int 보다 작은 데이터 유형이므로 이러한 변환은 암시적이었습니다.협소형 주조
이름에서 알 수 있듯이 Narrowing typecasting은 더 큰 데이터 유형을 더 작은 데이터 유형으로 좁히는 것을 의미합니다. 우리는 큰 유형을 작은 유형으로 변환하려고 할 때 이 유형 변환을 수행합니다.
double -> float -> long -> int -> char -> short -> 바이트
이러한 유형의 캐스팅의 경우 자체 변환을 지정하여 Java의 기본 변환을 재정의합니다. 이를 달성하기 위해 대상 데이터 유형 앞에 유형 변환이 필요한 변수 또는 값을 괄호 '()' 안에 작성합니다. 그러나 이러한 유형의 주조로 인해 정밀도가 손실될 수 있습니다.
예
//Manual Type Conversion
public class NarrowingExample {
public static void main(String[] arg) {
// double data type
double d = 97.04;
// Print statements
System.out.println("double value: " + d);
// Narrowing type casting from double to long
// implicitly writing the target data type in () followed by initial data type
long l = (long) d;
// fractional part lost - loss of precision
System.out.println("long value: " + l);
// Narrowing type casting from double to int
// implicitly writing the target data type in () followed by initial data type
int i = (int) l;
// fractional part lost - loss of precision
System.out.println("int value: " + i);
// Narrowing type casting from double to int
// implicitly writing the target data type in () followed by initial data type
char c = (char) i;
// displaying character corresponding to the ASCII value of 100
System.out.println("char value: " + c);
}
}
산출
double 값: 97.04 long 값: 97 int 값: 97 char 값: a
GO TO FULL VERSION