Kursusindhold
Java Udvidet
Java Udvidet
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
package 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?
Var alt klart?
Tak for dine kommentarer!
Sektion 1. Kapitel 2