Różnica między rzutowaniem typów a konwersją typów

Autor: Laura McKinney
Data Utworzenia: 1 Kwiecień 2021
Data Aktualizacji: 4 Móc 2024
Anonim
Różnica między rzutowaniem typów a konwersją typów - Technologia
Różnica między rzutowaniem typów a konwersją typów - Technologia

Zawartość


Podstawowa różnica między konwersją typu a rzutowaniem typu, tj. Konwersja typu jest wykonywana „automatycznie” przez kompilator, podczas gdy rzutowanie typu musi być „jawnie wykonane” przez programistę.

Dwa terminy „rzutowanie typów” i „konwersja typów” występują, gdy zachodzi potrzeba konwersji jednego typu danych na inny. Gdy oba typy są ze sobą kompatybilne, konwersja jednego typu na inny jest wykonywana automatycznie przez kompilator. Omówmy różnicę zarówno rzutowania typu, jak i konwersji za pomocą tabeli porównawczej.

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Wniosek

Wykres porównania:

Podstawa do porównaniaTyp CastingKonwersja typu
ZnaczenieJeden typ danych jest przypisywany do innego przez użytkownika za pomocą operatora rzutowania, a następnie nazywany jest „rzutowaniem typów”.Automatyczna konwersja jednego typu danych na inny przez kompilator nazywa się „konwersją typu”.
StosowanyRzutowanie typów można również zastosować do dwóch niezgodnych typów danych.Konwersję typu można zrealizować tylko wtedy, gdy dwa typy danych są kompatybilne.
OperatorDo rzutowania typu danych na inny wymagany jest operator rzutowania ().Nie wymaga operatora.
Rozmiar typów danychTyp miejsca docelowego może być mniejszy niż typ źródła.W tym przypadku typ docelowy musi być większy niż typ źródłowy.
ZaimplementowanoOdbywa się to podczas projektowania programu.Odbywa się to jawnie podczas kompilacji.
Rodzaj konwersji

Zawężenie konwersji.Poszerzenie konwersji.
Przykładint a;
bajt b;
...
...
b = (bajt) a;
int a = 3;
pływak b;
b = a; // wartość w b = 3.000.


Definicja rzutowania typu

Typ odlewania można zdefiniować jako rzutowanie jednego typu danych na inny typ danych przez programistę podczas projektowania programu. Automatyczna konwersja jednego typu danych na inny nie jest możliwa przez cały czas. Może być warunkiem, że „typ docelowy” jest mniejszy niż „typ źródłowy”. Dlatego programista musi jawnie rzutować większy typ danych na mniejszy typ danych, używając operatora rzutowania „()”. Ponieważ większy typ danych jest modulowany do mniejszego typu danych, jest również nazywany „zawężeniem konwersji”.

Deklaracja:

typ_docelowy = (typ_docelowy) zmienna / wartość // typ docelowy to typ, w którym chcesz przekonwertować typ źródłowy, zawsze jest to typ docelowy.

Przykład

Rozumiemy to na przykładzie. Chcesz przekonwertować typ danych „int” na „bajt”. Ponieważ „bajt” jest mniejszy niż „int”, konwersja typów jest niedozwolona. W tym przypadku musieliśmy domyślnie przekonwertować „int” na „bajt” za pomocą operatora rzutowania „()”. Ponieważ „int” jest większy niż „bajt”, rozmiar „int” zostanie zmniejszony do zakresu „int mod byte”.


int a; bajt b; ... ... b = (bajt) a;

Kiedy „zmiennoprzecinkowe” jest konwertowane na „int”, wielkość zmiennoprzecinkowego zostaje obcięta, ponieważ „int” nie przechowuje wartości ułamkowej. Jeśli rozmiar typu docelowego jest zbyt mały, aby można go było dopasować do typu źródłowego, wówczas typem źródłowym jest modulo typ docelowy „zakres”. Przesyłanie można również zastosować, gdy typy danych są kompatybilne. Dobrą praktyką jest stosowanie rzutowania typów wszędzie tam, gdzie konieczna jest konwersja typów.

Definicja konwersji typu

Konwersja typu to automatyczna konwersja jednego typu danych na inny w razie potrzeby, wykonywana jawnie przez kompilator. Ale przed konwersją typu muszą być spełnione dwa warunki.

  • Typ źródła i miejsca docelowego musi być zgodny.
  • Typ miejsca docelowego musi być większy niż typ źródła.

Te dwa warunki powinny zostać spełnione, aby uzyskać konwersję typu, a ten rodzaj konwersji nazywany jest „konwersją rozszerzającą”, ponieważ mniejszy typ jest konwertowany na większy typ, więc następuje poszerzenie typu. W przypadku tej rozszerzającej konwersji typy liczbowe takie jak „int”, „float” są ze sobą kompatybilne, podczas gdy numeryczne na char i boolean lub char na boolean również nie są kompatybilne.

Przykład

Ten przykład zapewni lepszy wgląd w to

int a = 3; pływak b; b = a; // wartość w b = 3.000.

Tutaj „int” jest konwertowane na „float”, który jest większy niż „int”, więc występuje rozszerzenie typu źródła. Tutaj nie jest wymagany operator rzutowania, ponieważ kompilator zrobi to jawnie.

  1. Podstawową różnicą odróżniającą rzutowanie typu od konwersji typu jest to, że rzutowanie typu to konwersja jednego typu na inny, wykonywana przez programistę. Z drugiej strony konwersja typu jest konwersją jednego typu na inny, wykonywaną przez kompilator podczas kompilacji.
  2. Rzutowanie typów można zastosować do typów danych, które mogą nie być ze sobą kompatybilne. I odwrotnie, konwersję typów można zastosować tylko do typów danych, które są ze sobą kompatybilne.
  3. Konwersja jednego typu na inny w rzutowaniu typu wymaga operatora rzutowania „()”, podczas gdy konwersja jednego typu danych na inny w konwersji typu nie wymaga żadnego operatora.
  4. Podczas konwersji jednego typu danych na inny w rzutowaniu typu, typ docelowy może być większy lub mniejszy niż typ źródłowy. Przeciwnie, typ docelowy musi być większy niż typ źródłowy w konwersji typu.
  5. Konwersja jednego typu na inny jest wykonywana podczas kodowania w rzutowaniu typu. Natomiast w przypadku konwersji typu konwersja jednego typu na inny odbywa się jawnie podczas kompilacji.
  6. Rzutowanie typu nazywa się konwersją zawężającą, ponieważ tutaj typ docelowy może być mniejszy niż typ źródłowy. W przeciwieństwie do konwersji typu nazywa się konwersją rozszerzającą, ponieważ tutaj typ docelowy musi być większy niż typ źródłowy.

Wniosek:

Można stwierdzić, że konwersja typu i rzutowanie typu, oba wykonują zadanie konwersji jednego typu danych na inny, ale różnią się tym, że rzutowanie typu jest wykonywane przez programistę, przy użyciu operatora rzutowania () ', a konwersja typu jest wykonywana przez kompilator i nie używa żadnego operatora.