Autoboxing og unboxing
Regler for automatisk konvertering
Autoboxing og unboxing er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.
Automatisk konvertering
Autoboxing er, når Java automatisk konverterer en primitiv type til dens wrapperobjekt. Unboxing er det omvendte, hvor en wrapper konverteres tilbage til en primitiv type.
Det sker automatisk, så du kan blande de to verdener uden manuelt at kalde konverteringsmetoder.
Boxing i praksis
Når du tildeler en int til en Integer-variabel, udløser det autoboxing. Compileren indsætter et kald til Integer.valueOf for dig.
public class Main {
public static void main(String[] args) {
int primitive = 42;
Integer boxed = primitive;
System.out.println(boxed);
}
}Unboxing i praksis
Når du tildeler en Integer til en int, udløser det unboxing. Compileren indsætter i baggrunden et kald til intValue.
public class Main {
public static void main(String[] args) {
Integer boxed = 99;
int primitive = boxed;
System.out.println(primitive);
}
}Boxing i samlinger
Det mest almindelige sted, hvor du ser autoboxing, er, når du føjer primitive værdier til en samling. Du skriver list.add(5), og Java pakker automatisk 5 ind i en Integer.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(2);
int first = nums.get(0);
System.out.println(first);
}
}Aritmetik udløser unboxing
Når du bruger matematiske operatorer på wrapperobjekter, foretager Java først unboxing til primitive typer, udfører beregningen og kan derefter pakke resultatet ind igen.
Nedenfor lægges to Integer-værdier sammen ved først at foretage unboxing af dem begge.
public class Main {
public static void main(String[] args) {
Integer a = 10;
Integer b = 32;
int sum = a + b;
System.out.println(sum);
}
}Blanding af primitive typer og wrappere
Du kan frit blande en primitiv type og en wrapper i et udtryk. Java foretager unboxing af wrapperen, så begge sider er primitive typer under beregningen.
public class Main {
public static void main(String[] args) {
Integer wrapped = 7;
int raw = 3;
int product = wrapped * raw;
System.out.println(product);
}
}Boxing i metodekald
Autoboxing gælder også metodeargumenter. En metode, der forventer et Object eller en wrapper, kan modtage en primitiv værdi, og Java pakker den ind på vej ind.
public class Main {
static void show(Object value) {
System.out.println("Got: " + value);
}
public static void main(String[] args) {
show(123);
show(true);
}
}Den skjulte omkostning
Autoboxing er praktisk, men ikke gratis. Hver boxing opretter et objekt, og stramme løkker kan oprette millioner af kortlivede objekter.
I numeriske løkker, hvor ydeevnen er afgørende, bør du arbejde direkte med primitive typer i stedet for wrappere.
public class Main {
public static void main(String[] args) {
long total = 0;
for (int i = 0; i < 5; i++) {
total += i;
}
System.out.println(total);
}
}valueOf kontra new
Autoboxing bruger Integer.valueOf, som cacher små værdier mellem -128 og 127. Et kald til new Integer(...) opretter altid et nyt objekt og er nu forældet.
Lad helst autoboxing klare arbejdet.
public class Main {
public static void main(String[] args) {
Integer cached = Integer.valueOf(50);
System.out.println(cached);
}
}Ternær operator og boxing
En subtil regel: I et ternært udtryk kan Java, hvis den ene gren er en primitiv type, og den anden er en wrapper, foretage unboxing af begge til en fælles primitiv type.
Det er for det meste sikkert, men vær opmærksom på, at det kan udløse konverteringer, du ikke havde forventet.
public class Main {
public static void main(String[] args) {
boolean flag = true;
Integer result = flag ? 1 : 2;
System.out.println(result);
}
}Når det er nyttigt
Autoboxing findes for at gøre koden mere læsbar, når du blander primitive typer med generiske typer og samlinger. Brugt med omtanke fjerner det unødvendig kode. Brugt uforsigtigt i løkker, der kører ofte, skader det ydeevnen.
Hurtig kontrol
Kontroller din forståelse af reglerne for autoboxing.
Opsummering
Du har lært, hvordan autoboxing og unboxing fungerer:
- Autoboxing konverterer en primitiv type til en wrapper ved hjælp af
valueOf - Unboxing konverterer en wrapper tilbage til en primitiv type ved hjælp af metoder som
intValue - Det sker ved tildelinger, i samlinger, ved aritmetik og i metodekald
- Det er praktisk, men opretter objekter, så undgå det i løkker, der kører ofte
Lær Java med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 104
- Lektioner
- 374
Ofte stillede spørgsmål
Er lektionen “Autoboxing og unboxing” gratis?
Ja — hele teksten til “Autoboxing og unboxing” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Autoboxing og unboxing”?
Regler for automatisk konvertering Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Java Academy?
Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Autoboxing og unboxing”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Java Academy-lektion?
Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Primitive typer kontra wrapper-typer
- Autoboxing og unboxing
- Parsing og Valueof
- Faldgruber ved autoboxing