CodeGym /Java-blogg /Tilfeldig /Wrapper-klasser i Java
John Squirrels
Nivå
San Francisco

Wrapper-klasser i Java

Publisert i gruppen
Hei! Du er allerede godt kjent med primitive typer, og har jobbet en del med dem. I programmering (og spesielt Java) har primitiver mange fordeler: de bruker lite minne (og dermed gjør programmet mer effektivt) og har et klart avgrenset verdiområde. Men mens vi lærer Java, har vi allerede ofte gjentatt mantraet "alt i Java er et objekt". Men primitiver motsier direkte disse ordene. De er ikke objekter. Så, er vårt "alt er et objekt"-prinsippet feil? Det er det faktisk ikke. I Java har hver primitiv type en tvillingbror, en innpakningsklasse.

Hva er en wrapper-klasse?

En wrapper er en spesiell klasse som lagrer en primitiv internt. Men fordi det er en klasse, kan du lage forekomster av den. De lagrer de primitive verdiene internt, men er fortsatt reelle objekter. Omslagsklassenavn er veldig like (eller nøyaktig det samme som) navnene på deres tilsvarende primitiver. Så de er enkle å huske.
Innpakningsklasser for primitive datatyper
Primitive datatyper Innpakningskurs
int Heltall
kort Kort
lang Lang
byte Byte
flyte Flyte
dobbelt Dobbelt
røye Karakter
boolsk boolsk
Wrapper-objekter lages på samme måte som alle andre objekter:

public static void main(String[] args) {

   Integer i = new Integer(682);
  
   Double d = new Double(2.33);
  
   Boolean b = new Boolean(false);
}
Innpakningsklasser lar oss redusere manglene til primitive typer. Det mest åpenbare er at primitiver ikke har metoder. For eksempel har de ikke en toString()- metode, så du kan for eksempel ikke konvertere en int til en String . Men Integer wrapper-klassen gjør dette enkelt.

public static void main(String[] args) {

   Integer i = new Integer(432);
  
   String s = i.toString();
}
Det kan imidlertid være vanskeligere å konvertere i den andre retningen. La oss si at vi har en streng , som vi med sikkerhet vet inneholder et tall. Uansett, det er ingen naturlig måte å bruke en primitiv int for å trekke ut tallet fra strengen og konvertere det til et tall. Men det kan vi med innpakningsklassene.

public static void main(String[] args) {

   String s = "1166628";

   Integer i = Integer.parseInt(s);

   System.out.println(i);
}
Produksjon:
1166628
Vi har hentet ut et tall fra strengen og tilordnet det til Integer- referansevariabelen i . Forresten, angående referanser. Du vet allerede at argumenter overføres til metoder på forskjellige måter: primitiver etter verdi og objekter etter referanse. Du kan bruke denne kunnskapen når du lager dine egne metoder: for eksempel, hvis metoden din bruker brøktall, men du trenger logikk for å sende ved referanse, kan du sende Double / Float -argumenter til metoden i stedet for double / float . I tillegg til innpakningsklassenes metoder, kan deres statiske felt også være veldig praktiske. Tenk deg for eksempel at du har følgende oppgave: vis maksimalt muligint- verdi, etterfulgt av minimumsverdien. Dette problemet virker ganske grunnleggende. Men uten Google er det usannsynlig at du kan gjøre det. Men wrappers lar deg enkelt håndtere slike "daglige oppgaver":

public class Main {
   public static void main(String[] args) {

       System.out.println(Integer.MAX_VALUE);
       System.out.println(Integer.MIN_VALUE);
   }
}
Disse feltene hindrer deg i å bli distrahert fra å utføre mer alvorlige oppgaver. For ikke å nevne det faktum at å skrive inn 2147483647 (som tilfeldigvis er verdien av MAX_VALUE) er ingen liten prestasjon! :) I en tidligere leksjon påpekte vi dessuten at innpakningsobjekter er uforanderlige.

public static void main(String[] args) {

   Integer a = new Integer(0);
   Integer b = new Integer(0);

   b = a;
   a = 1;
   System.out.println(b);
}
Produksjon:
0
Tilstanden til objektet som opprinnelig ble pekt på av a endret seg ikke (fordi verdien av b også ville ha endret seg). Som med String s, i stedet for å endre wrapper-objektets tilstand, opprettes et helt nytt objekt i minnet. Så hvorfor bestemte Javas skapere til slutt å forlate primitive typer i språket? Siden alt skal være et objekt, og vi har innpakningsklasser som kan uttrykke alt som primitiver uttrykker, hvorfor ikke bare beholde innpakningene i språket og fjerne primitivene? Svaret er enkelt: ytelse. Primitive typer kalles primitive fordi de mangler mange av de "tunge" egenskapene til objekter. Ja, objekter har mange praktiske metoder, men du trenger dem ikke alltid. Noen ganger er alt du trenger tallet 33, eller 2,62, eller sant / usant . I situasjoner der fordelene med objekter ikke betyr noe og ikke er nødvendige for at programmet skal fungere, er primitiver langt bedre egnet til oppgaven.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION