Kursinhalt
Java Erweitert
Java Erweitert
Datenübertragung in Java
Wie werden Informationen in Java übertragen?
Aus dem vorherigen Kurs wissen Sie, dass es zwei Arten von Speicher gibt – Stack und Heap. Werfen wir einen Blick darauf, wie Daten in diesen beiden Speicherbereichen abgelegt werden:
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; } }
Wir haben 3 verschiedene Variablen erstellt. Nachfolgend sehen Sie ein Diagramm, das veranschaulicht, wie und wo sie im Speicher abgelegt werden:
Schauen wir uns an, was im Diagramm dargestellt ist:
- Wir sehen
String
-Felder im Stack-Speicher, die Verweise auf Werte im Heap-Speicher sind. Dadurch greifen wir nicht jedes Mal direkt auf den Heap-Speicher zu. Stattdessen greifen wir zunächst auf den Verweis im Stack-Speicher zu, was schneller ist als der Zugriff auf den Heap-Speicher. Mit Verweisen auf Werte sind Sie bereits beim Thema String Pool in Berührung gekommen; - Sie sehen, dass
int
nicht im Heap-Speicher gespeichert wird; sein Wert wird direkt im Stack-Speicher abgelegt. Dies gilt für alle primitiven Datentypen (byte
,short
,int
,long
,float
,double
undboolean
). Daher werden primitive Datentypen in Java als Wert übergeben.String
ist jedoch kein primitiver Datentyp, daher wird sein Wert im Heap-Speicher gespeichert; - Für jeden neuen Verweis wird im Heap-Speicher ein neues Objekt erstellt. Haben jedoch zwei Variablen desselben Typs denselben Wert, verweisen sie auf dasselbe Objekt im Heap-Speicher;
- Der Integer Pool ist ein Bereich im Stack-Speicher, in dem alle Integer-Werte im Bereich von
-128
bis127
verlinkt sind. Diese Optimierung dient der Leistungssteigerung bei der Zahlenverarbeitung in Java, da Zahlen in diesem Bereich häufig verwendet werden. Beachten Sie, dass der Stack-Speicher schneller arbeitet als der Heap-Speicher, sodass wir dank des Integer Pools schnellere Antworten erhalten; - Der String Pool ist ein Bereich im Heap-Speicher, in dem identische String-Werte gespeichert werden.
Fazit
In Java wird alles per Wert übergeben. Bei Objekten wird eine Kopie der Referenz übergeben, aber das eigentliche Objekt im Heap bleibt unverändert (sofern es unveränderlich ist, wie String
).
Variablen im Stack speichern Referenzen auf Objekte, die sich im Heap befinden. Dies gilt für alle Referenztypen, einschließlich String
.
1. Was ist ein Integer Pool in Java?
2. Wie werden Daten in Java übergeben, per Referenz oder per Wert?
Danke für Ihr Feedback!