Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Dataöverföring i Java | Djupgående Java-struktur
Java Fördjupad

bookDataöverföring i Java

Hur överförs information i Java?

Du känner till från föregående kurs 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

Main.java

copy
123456789
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 skapat 3 olika variabler. Nedan finns 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 ämnet String Pool;
  • Du kan se att int inte lagras i heapminnet; dess värde lagras direkt i stackminnet. Detta gäller för alla primitiva datatyper (byte, short, int, long, float, double och boolean). Därför passeras primitiva datatyper i Java som värden. Dock är String inte 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 -128 till 127 ä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?

question mark

Vad är en Integer Pool i Java?

Select the correct answer

question mark

Hur överförs data i Java, genom referens eller genom värde?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 2.63

bookDataöverföring i Java

Svep för att visa menyn

Hur överförs information i Java?

Du känner till från föregående kurs 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

Main.java

copy
123456789
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 skapat 3 olika variabler. Nedan finns 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 ämnet String Pool;
  • Du kan se att int inte lagras i heapminnet; dess värde lagras direkt i stackminnet. Detta gäller för alla primitiva datatyper (byte, short, int, long, float, double och boolean). Därför passeras primitiva datatyper i Java som värden. Dock är String inte 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 -128 till 127 ä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?

question mark

Vad är en Integer Pool i Java?

Select the correct answer

question mark

Hur överförs data i Java, genom referens eller genom värde?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 2
some-alt