Palyginimo diagrama:
Palyginimo pagrindas | Tipas liejimas | Tipo konvertavimas |
---|---|---|
Reikšmė | Naudotojas, naudodamas „cast“ operatorių, paskiria vieną duomenų tipą, tada jis vadinamas „Type Casting“. | Vieno tipo duomenų konvertavimas į automatinį kompiliatoriaus pavadinimą vadinamas „Tipo konversija“. |
Taikoma | Tipo liejimas taip pat gali būti taikomas dviems „nesuderinamiems“ duomenų tipams. | Tipo konvertavimą galima įgyvendinti tik tada, kai du duomenų tipai yra „suderinami“. |
operatorius | Norint perduoti duomenų tipą kitam, reikalingas liejimo operatorius „()“. | Operatoriaus nereikia. |
Duomenų tipų dydis | Paskirties tipas gali būti mažesnis už šaltinio tipą. | Čia paskirties vietos tipas turi būti didesnis nei šaltinio tipas. |
Įgyvendinta | Tai atliekama kuriant programą. | Tai daroma aiškiai rengiant. |
Konversijos tipas | Siauresnė konversija. | Konversijos išplėtimas. |
Pavyzdys | int a; baitų b; ... ... b = (baitas) a; | int a = 3; float b; b = a; // reikšmė b = 3.000. |
„Casting“ tipo apibrėžimas
Tipo liejimas gali būti apibrėžiamas kaip vienas duomenų tipo perdavimas kitam duomenų tipui, programuotojui programos kūrimo metu. Automatinis vieno duomenų tipo konvertavimas į kitą neįmanomas visą laiką. Gali būti sąlyga, kad „paskirties tipas“ yra mažesnis už „šaltinio tipą“, todėl programuotojas turi aiškiai nurodyti didesnį duomenų tipą į mažesnį duomenų tipą, naudodamas „liejimo operatorių“ (). Kadangi didesnis duomenų tipas yra moduliuojamas pagal mažesnį duomenų tipą, jis taip pat vadinamas „susiaurinimu“.
destination_type = (target_type) kintamasis / vertė // tikslinis tipas yra tipas, kuriame norite konvertuoti šaltinio tipą, kuris visada yra paskirties tipas.
Suprasime jį su pavyzdžiu. Duomenų tipą „int“ norite konvertuoti į „baitą“, dabar, kai „baitas“ yra mažesnis už „int“, tipo konvertavimas neleidžiamas. Čia mes turėjome netiesiogiai konvertuoti „int“ į „baitą“ naudojant liejimo operatorių „()“. Kadangi „int“ yra didesnis nei „baitas“, „int“ dydis bus sumažintas iki „int mod byte“ intervalo.
int a; baitų b; ... ... b = (baitas) a;
Kai „plūdė“ konvertuojama į „int“, plūdės dydis sutrumpinamas, nes „int“ neišsaugo dalinės vertės. Jei paskirties vietos tipas yra per mažas, kad šaltinio tipas atitiktų, šaltinio tipas yra modulio paskirties tipo „diapazonas“. Liejimas taip pat gali būti taikomas, kai duomenų tipai yra suderinami, gera praktika naudoti tipo liejimą visur, kur reikia konversijų.
Tipo konversijos apibrėžimas
Tipo konvertavimas yra automatinis vieno duomenų tipo konvertavimas į kitą, kai to reikalaujama kompiliatoriaus. Tačiau prieš tipo konvertavimą turi būti įvykdytos dvi sąlygos.
- Šaltinio ir paskirties tipas turi būti suderinamas.
- Paskirties tipas turi būti didesnis nei šaltinio tipas.
Šios dvi sąlygos turėtų atitikti tipo konversiją, o tokio tipo konversija vadinama „plečiama konversija“, nes mažesnis tipas konvertuojamas į didesnį tipą, atsiranda tipo išplėtimas. Dėl šio padidinimo konversijos skaitmeniniai tipai, kaip „int“, „float“, yra suderinami tarpusavyje, o skaitmeniniai į „char“ ir „boolean“ arba „char“ iki „boolean“ taip pat nėra suderinami.
Šis pavyzdys suteiks geresnį vaizdą
int a = 3; float b; b = a; // reikšmė b = 3.000.
Čia „int“ paverčiamas „float“, kuris yra didesnis nei „int“, todėl atsiranda šaltinio tipo išplėtimas. Čia nereikia jokio liejimo operatoriaus, nes kompiliatorius tai padarys aiškiai.
Pagrindiniai skirtumai tarp rūšiavimo ir konversijos
- Pagrindinis skirtumas, kuris išskiria tipinį liejimą nuo tipo konvertavimo, yra tai, kad tipo liejimas yra vieno tipo keitimas į kitą, kurį atlieka programuotojas. Kita vertus, tipo konvertavimas yra vieno tipo konvertavimas į kitą, kurį kompiliatorius atlieka rengiant.
- Tipo liejimas gali būti taikomas duomenų tipams, kurie gali būti nesuderinami vienas su kitu, tačiau tipo konvertavimas gali būti taikomas tik tiems duomenų tipams, kurie yra suderinami vienas su kitu.
- Vieno tipo konvertavimas į tipinį liejimą reikalauja liejimo operatoriaus „()“, o vieno duomenų tipo konvertavimas į kitą tipo konvertavimui nereikalauja operatoriaus.
- Konvertuodamas vieną duomenų tipą į kitą tipinio liejimo atveju, paskirties tipas gali būti didesnis arba mažesnis už šaltinio tipą. Kita vertus, paskirties vietos tipas turi būti didesnis nei tipo konvertavimo šaltinio tipas.
- Vieno tipo konvertavimas į kitą tipą atliekamas koduojant tipinį liejimą, o tipo konvertavimo metu vieno tipo konvertavimas į kitą yra aiškiai atliekamas sudarymo metu.
- Tipo liejimas vadinamas siaurinimu, nes čia paskirties tipas gali būti mažesnis už šaltinio tipą, o tipo konvertavimas vadinamas padidinimo konversija, nes čia paskirties tipas turi būti didesnis nei šaltinio tipas.
Išvada:
Galima daryti išvadą, kad tipo konvertavimas ir tipo liejimas atlieka užduotį paversti vieną duomenų tipą į kitą, tačiau skiriasi tuo, kad tipo liejimą atlieka programuotojas, naudodamasis „cast“ operatoriumi () ir tipo konvertavimą atlieka kompiliatorius, ir jis nenaudoja jokių operatorių.