„А сега най-интересната част. Ще ви разкажа за преобразуването на типове. Променливите не могат да променят типовете си, но има място, където можете да преобразувате типове. Това място е операция за присвояване.

"Можете да присвоявате променливи от различни типове една на друга. При това стойността на една променлива (от определен тип) се преобразува в стойност от другия тип и се присвоява на другата променлива. "

„Можем да посочим два вида преобразувания: разширяване на примитивни преобразувания и стесняване на примитивни преобразувания. Разширяването е като преместване на неща от малка кошница в голяма. Процедурата е незабележима и безболезнена. Стесняването е аналогично на изваждането на неща от голяма кошница и ги поставяте в по-малък. Когато направите това, може да нямате достатъчно място; може да се наложи да изхвърлите нещо. "

„Ето видовете, сортирани според размера на „кошницата“ им:“

Преобразуване на типа

„Само няколко коментара:

1. Кошницата на char е със същия размер като на short, но не можете да местите нещата свободно от едната в другата. Когато преместите стойности от short към char , стойностите, които са по-малки от 0, винаги ще бъдат загубени. Когато преместите стойности от char към short, стойности, по-големи от 32 000, ще бъдат загубени.

2. Когато преобразувате цели числа в дробни числа, най-малко значимите цифри от числото може да бъдат изхвърлени. Това обаче е приемливо, тъй като целта на дробното число е да съхранява приблизителна стойност."

" Когато извършваме стесняващи преобразувания, трябва изрично да кажем на компилатора, че не сме направor грешка: ние изхвърляме част от числото нарочно. Ние използваме оператор за преобразуване ( т.е. името на типа в скоби ), за да направим това."

"Ето How трябва да присвоявате променливи от различни типове:"

Java code Описание
byte a = 115;
int b = a;
Разширено примитивно преобразуване. всичко е страхотно
int c = 10000;
byte d = (byte) c;
Стесняващо примитивно преобразуване . Трябва изрично да посочим, че допълнителните byteове трябва да бъдат изхвърлени.
int c = 10;
byte d = (byte) c;
Стесняващо примитивно преобразуване. Трябва изрично да посочим, че допълнителните byteове трябва да бъдат изхвърлени, дори ако са равни на 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;
Стесняване на преобразувания във всички операции за присвояване, с изключение на първия ред. Тези преобразувания изискват изрично да посочим преобразуването на типа.

" Операторът за преобразуване трябва да бъде поставен преди число/променлива по всяко време, когато част от числото ще бъде отхвърлена or когато настъпи стесняващо примитивно преобразуване. Операторът за преобразуване засяга само числото/променливата, които го следват директно."

Java code Описание
float f = 10000;
long l = (long) f * f;
Само една от двете променливи се прехвърля към long: умножението на long и float е равно на float.
float f = 10000;
long l = (long) (f * f);
Целият израз е преобразуван в дълго.

"Виждам."