- scrise de echipa Academiei Vertex. Sperăm că va fi util pentru dvs. Citește plăcut!
- acesta este unul dintre articolele din "Tutorialul nostru Java"
Conversia de tip este un subiect care poate părea dificil pentru începători de a programa în Java. Cu toate acestea, vă asigurăm că, de fapt, totul este simplu. Principalul lucru pe care trebuie să-l înțelegeți prin ce legi există o interacțiune între variabile și să vă amintiți acest lucru atunci când scrieți programe. Deci, hai să ne ocupăm de asta.
În Java există două tipuri de transformări - o imagine care vă ajută:
Reamintim că întregul "univers Java" constă în:
- tipuri primitive (octet, scurt, int, long, char, float, dublu, boolean)
- obiecte
În acest articol:
- ia în considerare conversia de tip pentru tipurile primitive de variabile
- transformarea obiectelor (String, Scanner, etc.) în acest articol nu este luată în considerare, deoarece cu obiectele există o "magie" separată - acesta este subiectul unui articol separat.
Conversie automată
Ei bine, să încercăm să aflăm ce este "conversia automată".
Amintiți-vă, atunci când am analizat tipurile de variabile (în articolul "Variabile în Java: Crearea unei variabile"), am spus că o variabilă este un "container". în care valoarea poate fi stocată pentru utilizare ulterioară în program. De asemenea, am vorbit despre faptul că fiecare tip de variabil are propriul său domeniu de valori admise și cantitatea de memorie pe care o ocupă. Aici este o farfurie în care a fost pictat:
Deci, la ceea ce, de fapt, suntem clona. Pentru faptul că nu a fost ușor să dați valori de valori admise și cantitatea de memorie utilizată 🙂
Să comparăm, de exemplu:
1. octet și scurt. byte are un interval mai mic de valori valide decât scurt. Adică, octetul este ca o cutie mai mică, și scurt - aceasta este o cutie mică. Așadar, putem să ne batem pe scurt.
2. byte și int. byte are un interval mai mic de valori valide decât int. Adică, octetul este ca o cutie mai mică, iar int este o cutie mai mică. Deci, putem atașa atașați la int.
3. int și lung. int are un interval mai mic de valori valide decât lung. Asta este, int este o cutie mai mica, si lunga este o cutie mai mica. Asta înseamnă că putem atașa int de mult.
Acesta este un exemplu de conversie automată. Acest lucru poate fi prezentat schematic sub forma acestei imagini:
Să vedem cum funcționează acest lucru în practică.
Codul 1 - dacă executați acest cod pe computerul dvs., consola va afișa numărul 15
Și-i-i? Credeți că odată ce același număr a fost transmis la consola și numărul de cod 1 diferă de codul 2 numai de tipul variabilei b, atunci nu există nicio diferență între ele? Nu e așa.
În codul 2 există o conversie automată a tipurilor, iar în codul 1 - nu:
Deși numărul este în esență același, dar acum este într-un container mai mare, care ocupă mai mult spațiu pe disc. În acest caz, JVM efectuează conversii automate pentru dvs. Știe că int este mai mare decât octetul.
Turnarea de tip
Un alt lucru este dacă încercați să schimbați ceva dintr-un container mai mare într-unul mai mic.
Puteți ști că într-un container mai mare se află faptul că se poate potrivi într-unul mic - dar JVM nu știe despre asta și încearcă să te protejeze de erori.
Prin urmare, trebuie să "spui direct" că situația este sub control:
La intersecție scrieți: a - dacă conversia are loc automat, pe - dacă doriți să utilizați o conversie explicită, x - dacă conversia este imposibilă.
* turnarea unui tip în sine se numește identică - nu este necesară prescrierea acestuia
- Uită-te din nou la ce dimensiune are fiecare tip primitiv. Încercați să redactați o diagramă care să arate unde să puneți ce tipuri. Desenați săgețile cuvintele "extinderea transformării" și "reducerea conversiei".
Într-un interviu pentru poziția de Junior Java Developer, vi se poate cere:
Ce știi despre conversia tipurilor de date primitive, există o pierdere de date, este posibil să se convertească un tip logic?
Încercați să răspundeți la întrebare.
Pentru a rezuma:
- Dacă "puneți" conținutul unui container mai mic într-un container mai mare, "conversia este automată și nu ar trebui să apară erori.
- Dacă este nevoie să puneți "valoare dintr-un container mai mare într-unul mai mic", trebuie să fiți atenți și să utilizați conversii de tip explicite.
- La turnarea flotorului sau dublu la tipurile întregi, partea fracționată nu este rotunjită, ci pur și simplu aruncată.
- Tipul boolean nu este distribuit niciunui tip.
- Tipul de caractere este convertit în tipuri numerice, cum ar fi codul de caractere din sistemul UNICODE.
- Dacă numărul este mai mare decât containerul, rezultatul va fi imprevizibil.
Acest articol descrie doar o parte a materialului pe tema tipurilor de turnare. Există, de asemenea, distribuții de tipuri de obiecte, turnate într-un șir (la urma urmei, orice poate fi scris într-o linie, nu?) Și promovarea tipului automat în expresii.