Dataöverföring i Java
Svep för att visa menyn
Hur information överförs i Java
Från föregående kurs vet du att det finns två typer av minne – stack och heap. Låt oss titta på hur data lagras i dessa två minnesområden:
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 skapat 3 olika variabler. Nedan visas ett diagram som illustrerar hur och var de lagras i minnet:
Låt oss gå igenom vad du observerade i diagrammet:
- Vi ser
String-fält i stackminnet som är länkar till värden i heapminnet. På detta sätt behöver vi inte komma åt heapminnet direkt varje gång. Istället får vi först tillgång till länken i stackminnet, vilket är snabbare än att komma åt heapminnet. Du har redan stött på länkar till värden när du lärde dig om String Pool-ämnet; - Du kan se att
intinte lagras i heapminnet; dess värde lagras direkt i stackminnet. Detta gäller för alla primitiva datatyper (byte,short,int,long,float,doubleochboolean). Därför passeras primitiva datatyper i Java som värden. Däremot ärStringinte en primitiv datatyp, så dess värde lagras i heapminnet; - Ett nytt objekt skapas i heapminnet för varje ny länk. Men om två variabler av samma typ har samma värde kommer de att referera till samma objekt i heapminnet;
- Integer Pool är ett område i stackminnet där alla heltalsvärden i intervallet från
-128till127är länkade. Denna optimering görs för att förbättra prestandan vid hantering av tal i Java, eftersom tal i detta intervall ofta används. Kom ihåg att stackminnet arbetar snabbare än heapminnet, så vi får snabbare svar tack vare Integer Pool; - String Pool är ett område i heapminnet där identiska strängvärden lagras.
Slutsats
I Java passeras allt som värde. För objekt passeras en kopia av referensen, men det faktiska objektet i heapen förblir oförändrat (om det är oföränderligt, som String).
Variabler i stacken lagrar referenser till objekt som finns i heapen. Detta gäller för alla referenstyper, inklusive String.
1. Vad är en Integer Pool i Java?
2. Hur överförs data i Java, genom referens eller genom värde?
Var allt tydligt?
Tack för dina kommentarer!
Avsnitt 1. Kapitel 2
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Fantastiskt!
Completion betyg förbättrat till 2.63Avsnitt 1. Kapitel 2