CodeGym /Kurse /Java Syntax /Primitive Datentypen

Primitive Datentypen

Java Syntax
Level 2 , Lektion 2
Verfügbar

Hallo, Amigo! Ich möchte dir etwas über die interne Struktur von Variablen erzählen. Wie du ja schon weißt, ist jede Variable mit einem Speicherbereich verknüpft, in dem ihr Wert gespeichert wird.

„Ja. Du hast mir letztes Mal davon erzählt.“

„Prima. Gut, dass du dich daran erinnerst. Dann also weiter.“

„Alle zusammengesetzten Typen bestehen aus einfacheren. Und die wiederum bestehen aus noch einfacheren. Bis wir schließlich bei den primitiven Typen ankommen, die nicht weiter vereinfacht werden können. So werden sie genannt: primitive Typen. Zum Beispiel ist int ein primitiver Typ, während String ein zusammengesetzter Typ ist, der seine Daten als eine Tabelle von Zeichen speichert (wobei jedes Zeichen ein primitiver Typ char ist).“

„Interessant. Erzähl mir mehr.“

„Zusammengesetzte Typen werden durch die Gruppierung einfacher Typen gebildet. Wir nennen solche Typen Klassen. Wenn wir eine neue Klasse in einem Programm definieren, deklarieren wir einen neuen zusammengesetzten Datentyp. Seine Daten sind dann entweder andere zusammengesetzte Typen oder primitive Typen.“

Java-Code Beschreibung
public class Person
{
   String name;
   int age;
}
Ein neuer zusammengesetzter Typ wird deklariert – Person.
Seine Daten werden in der String-Variable (zusammengesetzter Typ) name und der int-Variable (primitiver Typ) age gespeichert.
public class Rectangle
{
   int x, y, width, height;
}
Ein neuer zusammengesetzter Typ wird deklariert – Rectangle.
Er besteht aus vier int-Variablen (primitiver Typ).
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
Ein neuer zusammengesetzter Typ wird deklariert – Cat. Er hat die folgenden Variablen:
owner, zusammengesetzter Typ Person
territory, zusammengesetzter Typ Rectangle
age, primitiver Typ int
name, zusammengesetzter Typ String

„Im Moment ist mir alles klar, so seltsam es auch erscheinen mag.“

„Große (zusammengesetzte) Typen enthalten viele kleine (primitive) Typen. Deshalb nehmen Objekte dieser Typen viel Speicherplatz in Anspruch – mehr als Variablen der primitiven Typen. Manchmal sogar erheblich mehr. Die Durchführung von Zuweisungsoperationen mit solchen Variablen dauerte früher sehr lange und setzte das Kopieren großer Speicherbereiche voraus. Deshalb speichern Variablen von zusammengesetzten Typen nicht das Objekt selbst, sondern nur eine Referenz darauf, d.h. seine Vier-Byte-Adresse. Dies reicht aus, um die Daten in solchen Objekten anzusprechen. Die Java-Maschine beherrscht alle damit verbundenen Aufgaben.“

„Ich habe nichts davon verstanden.“

„Wir haben bereits gesagt, dass eine Variable wie eine Box ist. Wenn du die Zahl 13 speichern willst, kannst du 13 auf einen Zettel schreiben und in die Box legen.“

„Aber stell dir vor, du musst etwas Größeres in der Box (Variable) speichern. Zum Beispiel einen Hund, ein Auto oder deinen Nachbarn. Anstatt zu versuchen, dieses Objekt in eine viel zu kleine Box zu drücken, könntest du etwas einfacheres tun: verwende ein Foto des Hundes anstelle des eigentlichen Hundes, ein Nummernschild anstelle eines echten Autos oder die Telefonnummer deines Nachbarn anstelle deines Nachbarn.“

„Wir nehmen einen Zettel und schreiben die Telefonnummer des Nachbarn darauf. Dies ist wie eine Referenz auf ein Objekt. Wenn wir den Zettel mit der Telefonnummer des Nachbarn darauf kopieren und in mehrere Boxen legen, gibt es nun mehr Referenzen auf deinen Nachbarn. Aber genau wie vorher hast du immer noch nur einen Nachbarn. Das ist nachvollziehbar, oder?“

„Ein wichtiges Merkmal der Datenspeicherung auf diese Weise ist, dass du viele Referenzen auf ein einzelnes Objekt haben kannst.“

„Interessant! Ich habe es fast verstanden. Bitte sag mir noch, was passieren würde, wenn ich eine Variable eines zusammengesetzten Typs einer anderen Variablen desselben zusammengesetzten Typs zuweisen würde.“

„Dann würden die beiden Variablen die gleiche Adresse speichern. Das bedeutet, wenn du die Daten des Objekts änderst, auf das eine Variable verweist, änderst du die Daten, auf die die andere Variable verweist. Beide Variablen referenzieren das gleiche Objekt. Natürlich kann es viele andere Variablen geben, die auch Referenzen darauf speichern.“

„Was machen Variablen von zusammengesetzten (Referenz-/Klassen-)Typen, wenn sie keine Referenz auf ein Objekt enthalten? Ist das überhaupt möglich?“

„Ja, Amigo. Soweit war ich eigentlich noch nicht. Das ist möglich. Wenn eine Variable eines Referenztyps (zusammengesetzt) keine Referenz auf ein Objekt speichert, dann speichert sie eine so genannte „Nullreferenz“. Im Wesentlichen bedeutet dies, dass es auf ein Objekt verweist, dessen Adresse 0 ist. Die Java-Maschine erzeugt jedoch nie Objekte mit dieser Adresse, so dass sie immer weiß, dass sie kein Objekt referenziert, wenn eine Referenzvariable 0 enthält.“

Java-Code Beschreibung
String s;
String s = null;
Äquivalente Ausdrücke.
Person person;
person = new Person();
person = null;
Wir erstellen eine Person-Variable, deren Wert Null ist.
Wir weisen ihr die Adresse eines neu angelegten Objekts Person zu.
Wir weisen der Variablen Null zu.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
Wir erstellen ein Katze-Objekt und speichern seine Adresse in der Variablen katze; katze.halter ist gleich null.
Wir setzen katze.halter gleich der Adresse eines neu erstellten Person-Objekts.
katze.halter.name ist immer noch gleich Null.
Wir setzen katze.halter.name gleich "Gott"

„Habe ich dich richtig verstanden? Variablen werden in zwei Typen unterteilt: primitive Typen und Referenztypen. Primitive Typen speichern Werte direkt, während Referenztypen eine Referenz auf ein Objekt speichern. Primitive Typen sind int, char, boolean und viele weitere. Referenztypen beinhalten alles andere. Wir verwenden Klassen, um sie zu erstellen.“

„Du hast völlig Recht, mein Junge.“

„Du sagst also, du hast alles verstanden. Hier sind ein paar Aufgaben, mit denen du dein Wissen vertiefen kannst.“

Kommentare (26)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Cytarea Level 2, Wienrode, Germany
4 Mai 2025
bro wait wait what whaaat es macht SInn aber fühlt sich 4 Dimensional an
Maxinus Analusis Level 3, Austria
16 Dezember 2023
Level 2, Lektion 2: Ich verstehe so ungefähr um was es geht aber mir erschließt sich noch nicht das große Ganze... Ist das normal? Die Aufgaben fallen mir auch eher schwer :/
Holger Level 3, München, Germany
9 Januar 2023
Was soll gehaltHacken(7000) sein, etwa die Anstiftung zu einer Straftat?
Lukas Level 9, Germany, Germany
14 Oktober 2023
Mensch Holger-____- "Ethical hacking is the practice of performing security assessments using the same techniques that hackers use, but with proper approvals and authorization from the organization you're hacking into."
elias Level 4, Germany, Germany
7 Oktober 2022
bei der Aufgabe Woher kommt eine Person steht weise 5 variablen zu? welche 5 variablen das ist irgendwie nicht richtig da steht name, alter, gewicht und geld... es wurde auch nur mit diesen Vieren als richtig bewertet.
Chris Level 15, Germany, Germany
9 November 2022
Wir erstellen ja im main person aus der Klasse Person also Person person. die fünfte Variable ist hier person.
elias Level 4, Germany, Germany
7 Oktober 2022
Benutzt statt 9/5 einfach 1.8 ist hier ein Bug da es nomalerweise funktionieren sollte. Beispiel: double celsiusZuFahrenheit = 1.8 * celsius + 32; hat mich echt geärgert das bei einem double mit 9/5 hier einfach statt 1.8 mit 1.0 gerechnet wird.
Maik Level 11, Germany, Germany
16 November 2022
double celsiusZuFahrenheit = 9 / 5; // Ist halt 1.0 double celsiusZuFahrenheit = 9.0 / 5.0 // Ist halt 1.8 Das ist kein Bug, sondern ein Double erwartet immer eine kommastelle. Ansonsten kommt die Arithmetic Logic Unit damit nicht zurecht.
Cytarea Level 2, Wienrode, Germany
5 Mai 2025
ich denke wenn man mit Ganzzahl sowie 9 rechnet, dann ist das Ergebnis auf Ganzzahl 1 gerundet. Es ist eigentlich ein rationales Ergebnis 1.8, wurde aber 1. dann kommt 73 raus.
Roman Zwetzich Level 4, Biebertal, Germany
15 August 2022
Die epic Aufgabe war eigentlich relativ einfach aber es hat nicht als richtig gegolten wenn man 9/5 anstatt 9/5. geschrieben hat. Vermutlich ein Bug.
19 Oktober 2023
ja...ergibt Sinn, weil ja das Ergebnis sonst bei der Division ja zu einer Ganzzahl abgerundet wird, wenn man mit dem . (oder d) nicht explizit festlegt, dass man ein Double als Ergebnis haben will....hat mich mehr Zeit gekostet das zu verstehen, als ich zugeben will.....haha
Anonymous #11016067 Level 3, Germany, Germany
11 Juni 2022
Woher soll man das mit dem double denn wissen? Es wurde zuvor nicht erklärt ... ziemlich ärgerlich!
Anonymous #11039101 Level 2, Germany, Germany
20 Juli 2022
ja muss ich dir auch zustimmen, die letzten beiden Kapitel kommen auf einmal Aufgaben mit Inhalten die überhaupt nicht erklärt werden.. Am Anfang dachte ich doch cooles Konzept, aber wird ja ziemlich schnell frustrierend und nicht wirklich didaktisch durchdacht
Asgan Level 3, Germany, Germany
22 Juli 2022
Es wurdei ndirekt bei der Definition von Integer und Strings angesprochen.
Eric1398 Level 2, Germany, Germany
15 Oktober 2023
double wurde doch mit int und String in lvl 0 erklärt nur bis dato nicht benutzt
Pelikan Level 3, Schönebeck, Germany
26 Mai 2022
Also hier fand ich Frau/Mann ehemann etwas verwirrend. Allerdings fand ich die Aufgabe mit dem Umrechner nur bedigt schwierig. Gibt es zu den Aufgaben dieses Levels eigentlich noch Zusatzaufgaben, um das Wissen zu festigen?
Samuel Level 2, Dresden, Germany
27 September 2022
ich denke mal nur mit dem pro upgrade
elijah Level 2, Germany, Germany
23 November 2021
ich schnall das mit der Mann Frau objekt geschichte nicht.. kann mir hier jemadn weiterhelfen?
JanSudholt Level 3, Germany, Germany
6 Januar 2022
Die Variable "mann" ist gleichzusetzen mit "frau.ehemann" siehe Hinweis. Hab auch etwas gebraucht um das zu raffen 😄
coffeeCuppa Level 2, Germany, Germany
31 März 2022
Ging mir auch so. Man kommt irgendwie total durcheinander mit der Zuweisung.
Daniel Ritter Level 17, Augsburg, Deutschland
31 März 2021
Wäre wohl besser, wenn hier der korrekte Umgang mit Gleitkommazahlen (double, float) schon davor erklärt werden würden. Zuerst sind hier alle geil auf int und String und plötzlich kommen double ums Eck. Tipp: Kommt drauf an, wie ihr genau rechnet... Aber ihr habt einen Bruch 5/9 oder 9/5 in der Rechnung. Setzt bei diesem Bruch ein "d" als Suffix, also bspw. "5/9d" (OHNE LEERZEICHEN DAZWISCHEN). Somit kommt dabei auch nicht 0, sondern der korrekte Wert heraus.