CodeGym /Java blogg /Slumpmässig /Wrapper-klasser i Java
John Squirrels
Nivå
San Francisco

Wrapper-klasser i Java

Publicerad i gruppen
Hej! Du är redan väl bekant med primitiva typer och har arbetat en del med dem. Inom programmering (och Java i synnerhet) har primitiver många fördelar: de använder lite minne (och gör på så sätt programmet mer effektivt) och har ett tydligt avgränsat värdeintervall. Men när vi lär oss Java har vi redan ofta upprepat mantrat "allt i Java är ett objekt". Men primitiver motsäger direkt de orden. De är inga objekt. Så, är vår "allt är ett objekt"-princip falsk? Det är det faktiskt inte. I Java har varje primitiv typ en tvillingbror, en omslagsklass.

Vad är en Wrapper Class?

Ett omslag är en specialklass som lagrar en primitiv internt. Men eftersom det är en klass kan du skapa instanser av den. De lagrar de primitiva värdena internt, men är fortfarande verkliga objekt. Omslagsklassnamn är mycket lika (eller exakt samma som) namnen på deras motsvarande primitiver. Så de är lätta att komma ihåg.
Omslagsklasser för primitiva datatyper
Primitiva datatyper Omslagsklasser
int Heltal
kort Kort
lång Lång
byte Byte
flyta Flyta
dubbel Dubbel
röding Karaktär
booleskt Boolean
Wrapper-objekt skapas på samma sätt som alla andra objekt:

public static void main(String[] args) {

   Integer i = new Integer(682);
  
   Double d = new Double(2.33);
  
   Boolean b = new Boolean(false);
}
Omslagsklasser låter oss mildra bristerna hos primitiva typer. Det mest uppenbara är att primitiver inte har metoder. Till exempel har de inte en toString()- metod, så du kan till exempel inte konvertera en int till en String . Men integer wrapper-klassen gör detta enkelt.

public static void main(String[] args) {

   Integer i = new Integer(432);
  
   String s = i.toString();
}
Att konvertera åt andra hållet kan dock vara svårare. Låt oss säga att vi har en sträng , som vi säkert vet innehåller ett nummer. Oavsett vilket, det finns inget naturligt sätt att använda en primitiv int för att extrahera numret från strängen och konvertera det till ett tal. Men det kan vi med omslagsklasserna.

public static void main(String[] args) {

   String s = "1166628";

   Integer i = Integer.parseInt(s);

   System.out.println(i);
}
Produktion:
1166628
Vi extraherade framgångsrikt ett tal från String och tilldelade det till Integer- referensvariabeln i . Förresten, angående referenser. Du vet redan att argument överförs till metoder på olika sätt: primitiver efter värde och objekt genom referens. Du kan använda denna kunskap när du skapar dina egna metoder: till exempel, om din metod använder bråktal men du behöver logik för att skicka med referens, kan du skicka Double / Float -argument till metoden istället för double / float . Förutom omslagsklassernas metoder kan deras statiska fält också vara mycket bekväma. Föreställ dig till exempel att du har följande uppgift: visa så mycket som möjligtint- värde, följt av lägsta möjliga värde. Detta problem verkar ganska grundläggande. Men utan Google är det osannolikt att du skulle kunna göra det. Men omslag låter dig enkelt hantera sådana "vardagliga uppgifter":

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

       System.out.println(Integer.MAX_VALUE);
       System.out.println(Integer.MIN_VALUE);
   }
}
Dessa fält hindrar dig från att bli distraherad från att utföra mer allvarliga uppgifter. För att inte nämna det faktum att att skriva in 2147483647 (som råkar vara värdet av MAX_VALUE) är ingen liten bedrift! :) Dessutom, i en tidigare lektion, påpekade vi att omslagsobjekt är oföränderliga.

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
Tillståndet för objektet som ursprungligen pekade på av a ändrades inte (eftersom värdet på b också skulle ha ändrats). Som med String s, istället för att ändra omslagsobjektets tillstånd, skapas ett helt nytt objekt i minnet. Så varför beslutade Javas skapare till slut att lämna primitiva typer i språket? Eftersom allt ska vara ett objekt, och vi har omslagsklasser som kan uttrycka allt som primitiver uttrycker, varför inte bara behålla omslagen i språket och ta bort primitiva? Svaret är enkelt: prestanda. Primitiva typer kallas primitiva eftersom de saknar många av de "tunga" egenskaperna hos föremål. Ja, föremål har många praktiska metoder, men du behöver dem inte alltid. Ibland behöver du bara siffran 33, eller 2,62, eller sant / falskt . I situationer där fördelarna med objekt inte spelar någon roll och inte krävs för att programmet ska fungera, är primitiver mycket bättre lämpade för uppgiften.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION