CodeGym /Java blog /Tilfældig /Indpakningskurser i Java
John Squirrels
Niveau
San Francisco

Indpakningskurser i Java

Udgivet i gruppen
Hej! Du er allerede godt bekendt med primitive typer, og har arbejdet en del med dem. Inden for programmering (og i særdeleshed Java) har primitiver mange fordele: de bruger lidt hukommelse (og dermed gør programmet mere effektivt) og har et klart afgrænset værdiområde. Men mens vi lærer Java, har vi allerede ofte gentaget mantraet "alt i Java er et objekt". Men primitiver modsiger direkte disse ord. De er ikke objekter. Så er vores "alt er et objekt"-princip falsk? Det er det faktisk ikke. I Java har enhver primitiv type en tvillingebror, en indpakningsklasse.

Hvad er en indpakningsklasse?

En indpakning er en speciel klasse, der opbevarer en primitiv internt. Men fordi det er en klasse, kan du oprette forekomster af det. De gemmer de primitive værdier internt, men er stadig virkelige objekter. Indpakningsklassenavne minder meget om (eller nøjagtigt de samme som) navnene på deres tilsvarende primitiver. Så de er nemme at huske.
Indpakningsklasser for primitive datatyper
Primitive datatyper Indpakningsklasser
int Heltal
kort Kort
lang Lang
byte Byte
flyde Flyde
dobbelt Dobbelt
char Karakter
boolesk Boolean
Indpakningsobjekter oprettes på samme måde 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);
}
Indpakningsklasser lader os afbøde manglerne ved primitive typer. Det mest åbenlyse 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 gør dette nemt.

public static void main(String[] args) {

   Integer i = new Integer(432);
  
   String s = i.toString();
}
Det kan dog være vanskeligere at konvertere i den anden retning. Lad os sige, at vi har en streng , som vi med sikkerhed ved indeholder et tal. Uanset hvad, er der ingen indbygget måde at bruge en primitiv int til at udtrække tallet fra strengen og konvertere det til et tal. Men det kan vi med indpakningsklasserne.

public static void main(String[] args) {

   String s = "1166628";

   Integer i = Integer.parseInt(s);

   System.out.println(i);
}
Produktion:
1166628
Vi udtrak et tal fra strengen og tildelte det til integer- referencevariablen i . I øvrigt angående referencer. Du ved allerede, at argumenter overføres til metoder på forskellige måder: primitiver efter værdi og objekter ved reference. Du kan bruge denne viden, når du opretter dine egne metoder: for eksempel, hvis din metode bruger brøktal, men du har brug for logik for at videregive ved reference, kan du videregive Double / Float -argumenter til metoden i stedet for double / float . Ud over indpakningsklassernes metoder kan deres statiske felter også være meget praktiske. Forestil dig for eksempel, at du har følgende opgave: vis det maksimalt muligeint- værdi efterfulgt af den mindst mulige værdi. Dette problem virker ret grundlæggende. Men uden Google er det usandsynligt, at du kunne gøre det. Men indpakninger giver dig mulighed for nemt at håndtere sådanne "jordiske opgaver":

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

       System.out.println(Integer.MAX_VALUE);
       System.out.println(Integer.MIN_VALUE);
   }
}
Disse felter forhindrer dig i at blive distraheret fra at udføre mere seriøse opgaver. For ikke at nævne det faktum, at indtastning af 2147483647 (som tilfældigvis er værdien af ​​MAX_VALUE) ikke er nogen mindre bedrift! :) Desuden påpegede vi i en tidligere lektion, at indpakningsobjekter 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);
}
Produktion:
0
Tilstanden af ​​det objekt, der oprindeligt pegede på af a , ændrede sig ikke (fordi værdien af ​​b også ville have ændret sig). Som med String s, i stedet for at ændre wrapper-objektets tilstand, oprettes et helt nyt objekt i hukommelsen. Så hvorfor besluttede Javas skabere i sidste ende at efterlade primitive typer i sproget? Da alting skal være et objekt, og vi har indpakningsklasser, der kan udtrykke alt, hvad primitiver udtrykker, hvorfor så ikke kun beholde indpakningerne i sproget og fjerne primitiverne? Svaret er enkelt: ydeevne. Primitive typer kaldes primitive, fordi de mangler mange af de "tunge" træk ved objekter. Ja, objekter har mange praktiske metoder, men du har ikke altid brug for dem. Nogle gange er alt, hvad du behøver, tallet 33 eller 2,62 eller sand / falsk . I situationer, hvor fordelene ved objekter ikke betyder noget og ikke er nødvendige for at programmet kan fungere, er primitiver langt bedre egnet til opgaven.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION