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öjligt
int- 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.
GO TO FULL VERSION