Dataoverførsel i Java
Hvordan overføres information i Java?
Du ved fra det forrige kursus, at der findes to typer hukommelse - stack og heap. Lad os se på, hvordan data gemmes i disse to hukommelsesområder:
Main.java
123456789package com.example; public class Main { public static void main(String[] args) { String number = new String("170"); String word = new String("word"); int poolNumber = -4; } }
Vi har oprettet 3 forskellige variabler. Nedenfor ses et diagram, der illustrerer, hvordan og hvor de vil blive gemt i hukommelsen:
Lad os gennemgå, hvad du observerede i diagrammet:
- Vi ser
String
-felter i stakhukommelsen, som er henvisninger til værdier i bunkehukommelsen. På denne måde får vi ikke direkte adgang til bunkehukommelsen hver gang. I stedet tilgår vi først henvisningen i stakhukommelsen, hvilket er hurtigere end at tilgå bunkehukommelsen. Du har allerede stødt på henvisninger til værdier, da du lærte om emnet String Pool; - Du kan se, at
int
ikke gemmes i bunkehukommelsen; dens værdi gemmes direkte i stakhukommelsen. Dette gælder for alle primitive datatyper (byte
,short
,int
,long
,float
,double
ogboolean
). Dermed videregives primitive datatyper i Java som værdier. Dog erString
ikke en primitiv datatype, så dens værdi gemmes i bunkehukommelsen; - Et nyt objekt oprettes i bunkehukommelsen for hvert nyt link. Men hvis to variabler af samme type har samme værdi, vil de referere til det samme objekt i bunkehukommelsen;
- Integer Pool er et område i stakhukommelsen, hvor alle heltalsværdier i intervallet fra
-128
til127
er forbundet. Denne optimering udføres for at forbedre ydeevnen ved håndtering af tal i Java, da tal i dette interval ofte bruges. Husk, at stakhukommelsen arbejder hurtigere end bunkehukommelsen, så vi får hurtigere svar takket være Integer Pool; - String Pool er et område i bunkehukommelsen, hvor identiske strengværdier gemmes.
Konklusion
I Java videregives alt som værdi. For objekter videregives en kopi af referencen, men det faktiske objekt i bunkehukommelsen forbliver uændret (hvis det er uforanderligt, som String
).
Variabler i stakken gemmer referencer til objekter placeret i bunkehukommelsen. Dette gælder for alle referencetyper, inklusive String
.
1. Hvad er en Integer Pool i Java?
2. Hvordan overføres data i Java, ved reference eller ved værdi?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 2.63
Dataoverførsel i Java
Stryg for at vise menuen
Hvordan overføres information i Java?
Du ved fra det forrige kursus, at der findes to typer hukommelse - stack og heap. Lad os se på, hvordan data gemmes i disse to hukommelsesområder:
Main.java
123456789package com.example; public class Main { public static void main(String[] args) { String number = new String("170"); String word = new String("word"); int poolNumber = -4; } }
Vi har oprettet 3 forskellige variabler. Nedenfor ses et diagram, der illustrerer, hvordan og hvor de vil blive gemt i hukommelsen:
Lad os gennemgå, hvad du observerede i diagrammet:
- Vi ser
String
-felter i stakhukommelsen, som er henvisninger til værdier i bunkehukommelsen. På denne måde får vi ikke direkte adgang til bunkehukommelsen hver gang. I stedet tilgår vi først henvisningen i stakhukommelsen, hvilket er hurtigere end at tilgå bunkehukommelsen. Du har allerede stødt på henvisninger til værdier, da du lærte om emnet String Pool; - Du kan se, at
int
ikke gemmes i bunkehukommelsen; dens værdi gemmes direkte i stakhukommelsen. Dette gælder for alle primitive datatyper (byte
,short
,int
,long
,float
,double
ogboolean
). Dermed videregives primitive datatyper i Java som værdier. Dog erString
ikke en primitiv datatype, så dens værdi gemmes i bunkehukommelsen; - Et nyt objekt oprettes i bunkehukommelsen for hvert nyt link. Men hvis to variabler af samme type har samme værdi, vil de referere til det samme objekt i bunkehukommelsen;
- Integer Pool er et område i stakhukommelsen, hvor alle heltalsværdier i intervallet fra
-128
til127
er forbundet. Denne optimering udføres for at forbedre ydeevnen ved håndtering af tal i Java, da tal i dette interval ofte bruges. Husk, at stakhukommelsen arbejder hurtigere end bunkehukommelsen, så vi får hurtigere svar takket være Integer Pool; - String Pool er et område i bunkehukommelsen, hvor identiske strengværdier gemmes.
Konklusion
I Java videregives alt som værdi. For objekter videregives en kopi af referencen, men det faktiske objekt i bunkehukommelsen forbliver uændret (hvis det er uforanderligt, som String
).
Variabler i stakken gemmer referencer til objekter placeret i bunkehukommelsen. Dette gælder for alle referencetyper, inklusive String
.
1. Hvad er en Integer Pool i Java?
2. Hvordan overføres data i Java, ved reference eller ved værdi?
Tak for dine kommentarer!