"그리고 이제 가장 흥미로운 부분입니다. 유형 변환에 대해 말씀드리겠습니다. 변수는 유형을 변경할 수 없지만 유형을 변환할 수 있는 곳이 있습니다. 그 곳이 대입 연산입니다. "

"서로 다른 유형의 변수를 할당할 수 있습니다. 이렇게 하면 (특정 유형의) 한 변수의 값이 다른 유형의 값으로 변환되어 다른 변수에 할당됩니다. "

"우리는 변환의 두 가지 유형을 지적할 수 있습니다: 기본 변환 확대 및 기본 변환 축소. 확장은 작은 바구니에서 큰 바구니로 물건을 옮기는 것과 같습니다. 절차는 눈에 띄지 않고 고통이 없습니다. 축소는 큰 바구니에서 물건을 꺼내는 것과 유사합니다. 이렇게 하면 공간이 부족해 무언가를 버려야 할 수도 있습니다. "

"다음은 '바구니' 크기에 따라 정렬된 유형입니다."

유형 변환

"몇 가지 의견:

1. char 의 바스켓은 short의 바스켓과 같은 크기이지만 한 곳에서 다른 곳으로 물건을 자유롭게 옮길 수 없습니다. short 에서 char 로 값을 이동하면 0보다 작은 값은 항상 손실됩니다. 값을 char에서 short로 이동하면 32,000보다 큰 값이 손실됩니다.

2. 정수를 분수로 변환할 때 숫자의 최하위 숫자가 버려질 수 있습니다. 그러나 소수의 목적은 대략적인 값을 저장하는 것이므로 허용됩니다."

" 축소 변환을 수행할 때 우리는 오류가 발생하지 않았음을 컴파일러에 명시적으로 알려야 합니다. 일부러 숫자의 일부를 버리는 것입니다. 이를 위해 캐스트 연산자 ( 예: 괄호 안의 유형 이름 )를 사용합니다."

"이것은 다양한 유형의 변수를 할당하는 방법입니다."

자바 코드 설명
byte a = 115;
int b = a;
프리미티브 변환 확대. 모든 것이 훌륭합니다.
int c = 10000;
byte d = (byte) c;
축소 프리미티브 변환 . 여분의 바이트를 버려야 한다고 명시적으로 명시해야 합니다.
int c = 10;
byte d = (byte) c;
축소 프리미티브 변환. 여분의 바이트는 0과 같더라도 버려야 한다고 명시적으로 명시해야 합니다.
float f = 10000;
long l = (long) (f * f);
float f2 = l;
long l2 = (long) f2;
float에 할당할 때 확장 프리미티브 변환이 발생합니다. float를 long에 할당할 때 축소 기본 변환이 발생합니다. 캐스트 연산자가 필요합니다.
double d = 1;
float f = (float) d;
long l = (long) f;
int i = (int) l;
short s = (short) i;
byte b = (byte) s;
첫 번째 줄을 제외한 모든 할당 작업에서 축소 변환. 이러한 변환을 위해서는 유형 변환을 명시적으로 나타내야 합니다.

" 캐스트 연산자는 숫자의 일부가 버려지거나 축소 기본 변환이 발생할 때 숫자/변수 앞에 와야 합니다. 캐스트 연산자는 바로 뒤에 오는 숫자/변수에만 영향을 미칩니다."

자바 코드 설명
float f = 10000;
long l = (long) f * f;
두 변수 중 하나만 long으로 캐스트됩니다. long과 float의 곱은 float와 같습니다.
float f = 10000;
long l = (long) (f * f);
전체 표현식이 long으로 캐스트됩니다.

"알겠어요."