Verständnis von Datentypen in Java

Der Autor wählte den Free and Open Source Fund aus, um eine Spende im Rahmen des Write for DOnations-Programms zu erhalten.

Einführung

Java ist eine statisch typisierte Programmiersprache. Das bedeutet, dass Sie beim Erstellen einer Variablen auch ihren Datentyp angeben müssen, also den Typ der Informationen, den sie speichert. Dies steht im Gegensatz zu dynamisch typisierten Sprachen wie PHP. Bei dynamisch typisierten Sprachen müssen Sie den Datentyp einer Variablen nicht angeben, was möglicherweise eine Erleichterung zu sein scheint.

Allerdings ermöglicht das Wissen um die Datentypen und ihre angemessene Verwendung den Entwicklern, ihren Code zu optimieren, da jeder Datentyp spezifische Ressourcenanforderungen hat. Außerdem, wenn Sie einen Datentyp angeben und versuchen, einen anderen Typ zu speichern, zum Beispiel durch einen Fehler, können Sie den Code nicht kompilieren. Mit statisch typisierten Sprachen können Sie also Fehler schon vor jedem Testen erkennen.

Java hat zwei Datentypen: primitiv und Referenz (auch bekannt als nicht-primitiv). In diesem Tutorial werden Sie Variablen verwenden, um Informationen in einem Java-Programm zu speichern und zu verwenden, um etwas über einige der häufig verwendeten Datentypen in Java zu erfahren. Dies ist keine umfassende Übersicht über alle Datentypen, aber dieser Leitfaden wird Ihnen helfen, sich mit den verfügbaren Optionen in Java vertraut zu machen.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

Primitive Types

Java primitive types sind die einfachsten und grundlegendsten Datentypen in Java. Sie repräsentieren Rohwerte wie Zahlen und Zeichen. Die am häufigsten verwendeten primitiven Datentypen sind int (Ganzzahlen), boolean (boolesche Werte) und char (Zeichen). Die restlichen finden Sie in der offiziellen Java-Datentypen-Dokumentation.

Ganzzahlen

Ganzzahlen sind sowohl negative als auch positive ganze Zahlen. In Java verwenden Sie int, um sie zu speichern. int kann große genug Zahlen für die meisten Zwecke aufnehmen: von -2.147.483.648 bis 2.147.483.647.

Lassen Sie uns anhand eines Beispiels ansehen, wie int verwendet wird:

int theAnswer = 42;

Primitive Typen beginnen immer mit einem Kleinbuchstaben (int). Die Java-Syntaxregeln erfordern, dass Sie zuerst den Datentyp (int) und dann seinen Namen (theAnswer) angeben. Danach weisen Sie mit dem Gleichheitszeichen (=) den Wert 42 der Variablen zu.

Unabhängig von seinem Datentyp verwenden Sie eine Variable, indem Sie direkt ihren Namen angeben, ohne irgendwelche Sonderzeichen voranzustellen. Dies liegt daran, dass Java es als Variable erkennen kann.

Hinweis: Der Name der Variable theAnswer und aller anderen Variablen in diesem Tutorial sind in Camel case geschrieben. Auch wenn es keine strenge Anforderung gibt, dies zu verwenden, ist dies die akzeptierte Benennungskonvention in Java.

Nachdem Sie die Variable deklariert haben, können Sie sie verwenden, indem Sie in einer Methode darauf verweisen, wie folgt:

int theAnswer = 42;
System.out.println("The answer to all questions is " + theAnswer);

In der zweiten Zeile drucken Sie theAnswer auf der Konsole aus, indem Sie die integrierte Methode println aus dem Paket System.out verwenden. Dies ist der einfachste Weg, eine Variable zu testen, um sicherzustellen, dass sie wie erwartet deklariert ist.

Um diesen Code in Aktion zu sehen, verwenden Sie das Java Shell-Tool. Nach der Installation von Java öffnen Sie ein Terminal oder eine Eingabeaufforderung auf Ihrem lokalen Computer und geben jshell ein:

  1. jshell

Ihre Ausgabe wird ähnlich aussehen wie folgt:

Output
| Welcome to JShell -- Version 11.0.16 | For an introduction type: /help intro jshell>

Sie können die Codebeispiele aus diesem Tutorial in die Konsole einfügen. Wenn Sie fertig sind, können Sie jshell beenden, indem Sie /exit eingeben.

Um int zu deklarieren und zu verwenden, fügen Sie die folgenden Zeilen in die jshell-Konsole ein:

  1. int theAnswer = 42;
  2. System.out.println("The answer to all questions is " + theAnswer);

Sie werden die folgende Ausgabe sehen:

Output
theAnswer ==> 42 The answer to all questions is 42

Diese Ausgabe bestätigt, dass Sie die int-Variable theAnswer korrekt auf 42 gesetzt haben (theAnswer ==> 42). Sie haben auch erfolgreich theAnswer verwendet, indem Sie es an eine Methode übergeben haben, und die Methode hat den erwarteten Variablenwert produziert.

Boolesche

Boolesche Werte sind true oder false. In Java verwenden Sie boolean, um sie zu speichern. Zum Beispiel, lassen Sie uns eine boolean-Variable erstellen, die definiert, ob Java Spaß macht:

boolean isJavaFun = true;

Sie definieren die Variable isJavaFun als true. Der alternative boolean-Wert ist false.

Unter Verwendung der obigen Variable können Sie den Satz Java macht Spaß: true wie folgt ausgeben:

  1. boolean isJavaFun = true;
  2. System.out.println("Java is fun: " + isJavaFun);

Das Ausführen dieser Zeilen in jshell ergibt die folgende Ausgabe:

Output
isJavaFun ==> true Java is fun: true

Ähnlich wie im int-Beispiel, wird die Methode println das Argument, das in den Klammern bereitgestellt wird, ausgeben. Das Pluszeichen (+) verknüpft oder fügt den String „Java macht Spaß: “ mit der Variable isJavaFun zusammen, sodass es in Wirklichkeit nur ein Argument ist – der String, Java macht Spaß: true.

Zeichen

Um ein einzelnes alphanumerisches Zeichen zu speichern, verwenden Sie char. Zum Beispiel:

char firstLetter = 'a';

Beachten Sie, dass der Buchstabe a von einfachen Anführungszeichen umgeben ist. Einfache Anführungszeichen können nur für char-Werte verwendet werden. Doppelte Anführungszeichen werden für Zeichenketten verwendet, wie Sie später lernen werden.

`char` scheint keine besonders nützliche Art zu sein, da es unwahrscheinlich ist, dass Sie eine Variable benötigen, die einem einzelnen Zeichen zugewiesen ist. Allerdings wird `char` als Baustein für Zeichenfolgenklassen wie `String` verwendet, die im Grunde eine Sammlung von `char`-Werten sind.

Wie Sie in diesem Abschnitt gesehen haben, ist die Deklaration und Verwendung von Variablen vom primitiven Typ einfach, da sie einfache Werte wie ganze Zahlen repräsentieren. Diese Werte sind bereit zur Verwendung und erfordern keine zusätzlichen Operationen wie das Erstellen von Objekten, das Aufrufen von Methoden usw.

Referenztypen

In dem ersten Tutorial dieser Serie, Wie man sein erstes Programm in Java schreibt, haben Sie gelernt, dass Java-Code in Klassen organisiert ist und dass diese Klassen als Vorlagen zur Erstellung von Objekten verwendet werden. Wenn solche Objekte Variablen zugewiesen werden, zeigen oder verweisen Sie auf diese Objekte. In diesen Fällen werden die Variablen als Referenztypen klassifiziert. Diese Variablen werden auch als nicht-primitiv bezeichnet, weil primitive Typvariablen nicht auf Objekte zeigen können.

Objekte sind leistungsstark, weil sie fortgeschrittene Eigenschaften haben und handeln können, wenn Sie ihre Methoden auslösen. Ohne jedoch Variablen, die auf sie verweisen, sind diese Objekte unzugänglich und praktisch unbrauchbar. Daher sind Referenztypvariablen für Java und objektorientierte Programmierung im Allgemeinen unerlässlich.

Hinweis: Referenztypen verweisen auf Objekte, die aus Klassen erstellt wurden. Um Verwirrung zu vermeiden, werden der Referenztyp und das erstellte Objekt in den folgenden Beispielen derselben Klasse sein.

In komplexen Programmen ist dies jedoch selten der Fall. In Java ist eine Schnittstelle eine Gruppe von Anforderungen für ein bestimmtes Verhalten, und diese Anforderungen können von einer oder mehreren Klassen erfüllt werden. Eine Klasse, die die Anforderungen einer Schnittstelle erfüllt, implementiert diese Schnittstelle. Daher ist es in komplexen Programmen üblich, eine Variable mit dem Referenztyp einer Schnittstelle zu deklarieren. Auf diese Weise geben Sie das Verhalten an, das Ihre Variable zeigen soll, ohne sie an eine konkrete Implementierung dieses Verhaltens zu binden. Dies ermöglicht es Ihnen, leicht zu ändern, auf welche Implementierung Ihre Variable zeigt, ohne die Art und Weise zu ändern, wie die Variable verwendet wird. Dieses komplexe Konzept ist Teil eines fortgeschritteneren Themas über Vererbung und Polymorphismus, das in unserer Java-Serie ein separates Tutorial sein wird.

Während es nur wenige primitive Typen gibt, sind Referenztypen praktisch unbegrenzt, da es keine Begrenzung für die Anzahl der Klassen (und Schnittstellen) gibt, und jede Klasse steht für einen Referenztyp. Es gibt viele integrierte Klassen in Java, die wesentliche Funktionalität bieten. Die am häufigsten verwendeten finden sich im Kernpaket java.lang. Einige davon werden Sie in diesem Abschnitt überprüfen.

Die String-Klasse

Die String-Klasse repräsentiert eine Kombination von Zeichen, die einen String bilden. Um eine String-Variable oder jede andere Referenztyp-Variable zu deklarieren, geben Sie zunächst ihren Typ gefolgt von ihrem Namen an. Danach weisen Sie ihr einen Wert mit dem Gleichheitszeichen zu. Bisher ähnelt es der Arbeit mit primitiven Typen. Referenztypen zeigen jedoch auf Objekte, sodass Sie ein Objekt erstellen müssen, wenn noch keines erstellt wurde. Hier ist ein Beispiel:

String hello = new String("Hello");

hello ist der Name der Variable mit dem Referenztyp String. Sie weisen ihm ein neues String-Objekt zu. Das neue String-Objekt wird mit dem Schlüsselwort new zusammen mit dem Klassennamen erstellt – in diesem Fall String. Der Klassenname String beginnt mit einem Großbuchstaben. Nach Konvention beginnen alle Klassen und damit Referenztypen mit einem Großbuchstaben.

Jede Klasse hat eine spezielle Methode namens Konstruktor, die zum Erstellen neuer Objekte verwendet wird. Sie können diesen Konstruktor aufrufen, indem Sie Klammern (()) am Ende des Klassennamens hinzufügen. Der Konstruktor kann Parameter akzeptieren, wie im obigen Beispiel, wo der Parameter "Hello" auf den Konstruktor für String angewendet wird.

Um zu bestätigen, dass die Variable hello wie erwartet funktioniert, übergeben Sie sie erneut an die println-Methode, wie folgt:

  1. String hello = new String("Hello");
  2. System.out.println(hello);

Das Ausführen dieser Zeilen in jshell ergibt die folgende Ausgabe:

Output
hello ==> "Hello" Hello

Diesmal bestätigt die Ausgabe, dass die Variable hello auf Hello gesetzt ist. Danach wird das gleiche Hello auf einer neuen Zeile gedruckt, was bestätigt, dass die Methode println() es verarbeitet hat.

Wrapper-Klassen

In dem vorherigen Abschnitt haben Sie mit dem Referenztyp String gearbeitet, der häufig verwendet wird. Andere beliebte Referenztypen sind die sogenannten Wrapper für primitive Typen. Eine Wrapper-Klasse umschließt oder enthält primitive Daten, daher ihr Name. Alle primitiven Typen haben Wrapper-Gegenstücke, und hier sind einige Beispiele:

  • Integer: Zum Umschließen von int-Werten.
  • Character: Zum Umschließen von char-Werten.
  • Boolean: Zum Umschließen von boolean-Werten.

Diese Wrapper existieren, damit Sie einen einfachen primitiven Wert zu einem leistungsstarken Objekt aufrüsten können. Jeder Wrapper verfügt über bereits einsatzbereite Methoden, die mit den Werten zusammenhängen, für die er entwickelt wurde.

Als Beispiel werden Sie Integer erkunden. Im vorherigen Abschnitt haben Sie ein String-Objekt mit dem new-Schlüsselwort erstellt. Einige Klassen bieten jedoch spezielle Methoden zum Erwerb von Objekten aus ihnen heraus an und ermutigen sogar dazu, diese zu verwenden, und Integer ist eine davon. Im Fall von Integer geht es bei der Verwendung einer speziellen Methode hauptsächlich um Ressourcenoptimierung, aber in anderen Fällen könnte es darum gehen, den Aufbau komplexer Objekte zu vereinfachen.

In folgendem Beispiel erstellen Sie eine Integer-Variable namens theAnswer mit dem Wert 42 unter Verwendung der valueOf-Methode:

  1. Integer theAnswer = Integer.valueOf(42);
  2. System.out.println(theAnswer);

In jshell erhalten Sie die folgende Ausgabe:

Output
theAnswer ==> 42 42

Indem Sie die Integer-Methode valueOf(42) aufrufen, weisen Sie Java an, Ihnen ein Objekt mit diesem Wert zu geben. Hinter den Kulissen überprüft Java, ob bereits ein Objekt mit einem solchen Wert im Cache vorhanden ist. Wenn ja, wird das Objekt mit der Variablen theAnswer verknüpft. Wenn nicht, wird ein neues Objekt für die Variable theAnswer erstellt.

Viele eingebaute Klassen bieten solche Methoden aus Leistungsgründen an, und ihre Verwendung wird empfohlen, wenn nicht sogar vorgeschrieben. Im Fall von Integer könnten Sie immer noch ein Objekt mit dem new-Schlüsselwort erstellen, jedoch erhalten Sie eine Warnung vor der Veralteten Nutzung.

Zusätzlich zu String und Wrappern gibt es auch andere nützliche integrierte Referenztypen, die Sie im Paketzusammenfassung von java.lang finden können. Um einige dieser fortgeschritteneren Referenztypen vollständig zu verstehen, ist eine zusätzliche Erklärung oder Vorwissen erforderlich. Deshalb werden wir einige von ihnen in unseren nächsten Tutorials aus der Java-Serie behandeln.

Literale

Literale stellen feste Werte dar, die direkt im Code verwendet werden können und daher sowohl primitiven als auch Referenztypen zugewiesen werden können. Es gibt einige Arten von Literalen, die wie folgt kategorisiert werden können.

Literal für primitiven Typ

Sie haben bereits einige Literale im Abschnitt über primitive Typen verwendet. Für jeden primitiven Typ gibt es ein Literal, wie die Beispiele: 42, 'a' und true. Ganzzahlen wie 42 sind Ganzzahlliterale. Ebenso sind Zeichen wie 'a' Zeichenliterale, und true und false sind boolesche Literale.

Primitive Typ Literale können auch verwendet werden, um Werte für Referenztypen zu erstellen. Das int-Literal wurde verwendet, um ein Integer-Objekt mit dem Code Integer.valueOf(42) zu erstellen. Es gibt auch eine Kurzform dafür, und Sie können den Wert direkt so zuweisen:

Integer theAnswer = 42;

42 ist ein Integer-Literal, genauso wie jede ganze Zahl, und Sie können es direkt der Variable theAnswer zuweisen, ohne zusätzliche Anweisungen. Es ist üblich, ein Integer so zu deklarieren, weil es praktisch ist.

Dieser Kurzansatz funktioniert auch für andere Primitive Typen Literale und deren entsprechende Referenztypen wie Boolean, zum Beispiel:

Boolean isFun = true;

true ist das Literal, das direkt der Variable isFun vom Typ Boolean zugewiesen wird. Es gibt auch ein false Literal, das Sie genauso zuweisen können.

Das String-Literal

Es gibt auch ein spezielles Literal für den Referenztyp String, und es wird durch die doppelten Anführungszeichen um seinen Wert erkannt. In diesem Beispiel ist es "Hallo, Welt!":

String helloWorld = "Hello, World!";

Literale zu verwenden ist einfacher und kürzer, deshalb bevorzugen es viele Programmierer. Sie können jedoch immer noch eine String-Variable mit einem neuen String-Objekt deklarieren, wie Sie es bereits im Abschnitt für Referenztypen getan haben.

Das Null-Literal

Es gibt noch ein weiteres wichtiges Literal: null, das das Fehlen eines Werts oder die Nichtexistenz eines Objekts repräsentiert. Null ermöglicht es Ihnen, einen Referenztyp zu erstellen und ihn auf null zu verweisen, anstatt ihn auf ein Objekt zu verweisen. null kann für alle Referenztypen verwendet werden, jedoch nicht für primitive Typen.

Es gibt jedoch eine Einschränkung bei dem null-Literal: Sie können Variablen damit deklarieren, aber Sie können diese Variablen nicht verwenden, bis Sie einen geeigneten, nicht-null-Wert neu zuweisen. Wenn Sie versuchen, eine Referenztypvariablle mit einem Wert null zu verwenden, erhalten Sie einen Fehler. Hier ist ein Beispiel:

  1. String initiallyNullString = null;
  2. System.out.println("The class name is: " + initiallyNullString.getClass());

Wenn Sie diesen Code in jshell ausführen, sehen Sie einen Fehler ähnlich wie den folgenden:

Output
initiallyNullString ==> null | Exception java.lang.NullPointerException | at (#4:1)

Je nach Ihrem Betriebssystem und Ihrer Java-Version kann Ihre Ausgabe unterschiedlich sein.

Der Fehler java.lang.NullPointerException wird ausgelöst, weil Sie versuchen, die Methode getClass() (die den Klassennamen zurückgibt) auf der Variablen initiallyNullString aufzurufen (die auf ein Null-Objekt verweist).

Hinweis: Der Einfachheit halber nennen wir java.lang.NullPointerException einen Fehler, obwohl es technisch gesehen eine Ausnahme ist. Für mehr über Ausnahmen und Fehler lesen Sie das Tutorial Exception Handling in Java.

Um den Fehler zu beheben, müssen Sie den Wert von initiallyNullString wie folgt neu zuweisen:

  1. String initiallyNullString = null;
  2. initiallyNullString = "not null any longer";
  3. System.out.println("The class name is: " + initiallyNullString.getClass());

Der neue, behobene Code gibt die folgende Ausgabe aus:

Output
initiallyNullString ==> null initiallyNullString ==> "not null any longer" The class name is: class java.lang.String

Die obige Ausgabe zeigt, wie initiallyNullString zunächst null ist und dann zu einem neuen String-Objekt wird, das "nicht mehr null" enthält. Als nächstes, wenn die Methode getClass() auf das instantiierte Objekt aufgerufen wird, erhalten Sie java.lang.String, wobei String der Klassenname und java.lang sein Paket ist. Schließlich wird eine vollständige, aussagekräftige Nachricht ausgegeben: "Der Klassenname ist: class java.lang.String".

Solche Deklarationen von null-Werten sind für Legacy-Code häufiger. Sie wurden verwendet, um zuerst eine Variable zu erstellen und später ihren tatsächlichen Wert zuzuweisen, der normalerweise durch einige Logik bestimmt wird. Seit Java Version 8 gibt es jedoch einen neuen Referenztyp namens Optional, der für Fälle, in denen zuvor null verwendet wurde, besser geeignet ist.

Lokale Variablentypinferenz

Bis jetzt haben Sie einige der gängigen Datentypen in Java verwendet, um Variablen zu definieren. Java 10 hat jedoch eine neue Funktion namens lokale Typinferenz eingeführt, die es Ihnen ermöglicht, das Schlüsselwort var vor einer neuen Variable zu verwenden. Mit dieser Funktion wird Java den Datentyp automatisch aus dem lokalen Kontext ableiten (das heißt, automatisch erraten). Die Typinferenz ist umstritten, da sie im Gegensatz zur zuvor erklärten Ausführlichkeit der Variablendefinition steht. Die Vor- und Nachteile einer solchen Funktion sind umstritten, aber die Tatsache ist, dass andere statisch typisierte Sprachen wie C++ die Typinferenz unterstützen.

In jedem Fall kann die Typinferenz die Verwendung von Datentypen nicht vollständig ersetzen, da sie nur mit lokalen Variablen funktioniert, also mit Variablen innerhalb einer Methode. Schauen wir uns ein Beispiel mit var an:

  1. var hello = "Hello";
  2. System.out.println(hello);

Sie deklarieren die Variable hello mit dem Schlüsselwort var, um Java anzuweisen, ihren Datentyp zu erkennen. Danach geben Sie ihn wie gewohnt in der Konsole aus, um zu bestätigen, dass er wie erwartet funktioniert:

Ouput
hello ==> "Hello" Hello

Dieses Beispiel funktioniert nur, wenn Ihre Java-Installation (genauer gesagt, die JDK-Version) über Version 10 liegt. Das Schlüsselwort var wird in älteren Versionen nicht unterstützt.

Typinferenz erfolgt während des Kompilierungsprozesses – das heißt, wenn Sie den Code kompilieren. Der Kompilierungsprozess wandelt den einfachen Text-Quellcode in Maschinencode um und wendet verschiedene Optimierungen an, einschließlich Typinferenz. Dies stellt sicher, dass der richtige Betrag an Systemspeicher für die inferierten Variablentypen verfügbar ist. Somit ist der Maschinencode, den Sie nach dem Kompilieren ausführen, vollständig optimiert, als hätten Sie alle Datentypen manuell angegeben.

In diesem Beispiel funktioniert das Schlüsselwort var, weil die Variable lokal ist, und der Datentyp var funktioniert nur mit lokalen Variablen. Lokale Variablen sind innerhalb von Methoden definiert und sind nur innerhalb der Methoden zugänglich, weshalb sie „lokal“ genannt werden.

Um zu zeigen, dass var nur für lokale Variablen verwendet werden kann, versuchen Sie, es außerhalb der Hauptmethode zu platzieren, wie folgt:

  1. public class Hello {
  2. var hello = "Hello";
  3. public static void main(String[] args) {
  4. // example code
  5. }
  6. }

Wenn Sie den obigen Code in jshell einfügen, erhalten Sie den folgenden Fehler:

Output
| Error: | 'var' is not allowed here | var hello = "Hello"; | ^-^

var ist dort nicht erlaubt, weil hello außerhalb einer Methode liegt und nicht mehr als lokal betrachtet wird. Somit funktioniert die Typinferenz nicht für nichtlokale Variablen, da der Kontext nicht zuverlässig verwendet werden kann, um den Datentyp zu erkennen.

Die Verwendung von var kann zwar herausfordernd sein und ist nicht erforderlich, Sie werden jedoch wahrscheinlich darauf stoßen, daher ist es nützlich, darüber Bescheid zu wissen.

Reservierte Schlüsselwörter

Beim Deklarieren von Variablen in Java gibt es eine weitere wichtige Regel zu beachten. Es gibt reservierte Schlüsselwörter, die Sie nicht für Variablennamen verwenden können. Zum Beispiel können Sie nicht ein primitives Typ int deklarieren und es new nennen, wie folgt:

  1. int new = 1;

Wenn Sie dieses Beispiel versuchen, erhalten Sie Kompilierungsfehler, weil new ein reserviertes Schlüsselwort ist.

Output
| Error: | '.class' expected | int new = 1; | ^ | Error: | <identifier> expected | int new = 1; | ^ | Error: | '(' or '[' expected | int new = 1; | ^ | Error: | unexpected type | required: value | found: class | int new = 1; | ^--^ | Error: | missing return statement | int new = 1; | ^----------^

Das Schlüsselwort new wird verwendet, um neue Objekte zu erstellen, und Java erwartet es nicht an dieser Position. In der Liste der Fehler im vorherigen Output ist der erste Teil am wichtigsten:

Output
| Error: | '.class' expected | int new = 1; | ^

Der Fehler '.class' erwartet bedeutet, dass Java erwartet, dass nach dem new-Schlüsselwort eine Klasse folgt. An diesem Punkt kann Java die Anweisung nicht interpretieren, und die übrigen Fehler treten auf.

Die übrigen reservierten Schlüsselwörter, wie abstract, continue, default, for und break, haben ebenfalls spezifische Bedeutungen in Java und können nicht für Variablennamen verwendet werden. Die vollständige Liste der reservierten Schlüsselwörter finden Sie auf der Java Language Keywords-Seite. Selbst wenn Sie sich nicht an alle reservierten Schlüsselwörter erinnern, können Sie Kompilierungsfehler verwenden, um das Problem zu identifizieren.

Fazit

In diesem Tutorial hast du etwas über primitive und Referenzdatentypen in Java gelernt, was ein komplexes, aber wichtiges Thema ist. Nimm dir Zeit, um es zu üben und gehe die Beispiele mehr als einmal durch. Versuche, einige der Datentypen und Werte zu ändern. Achte darauf, wann Fehler auftreten und wann nicht, um ein Gefühl für erfolgreiche Codeausführung zu entwickeln.

Weitere Informationen zu Java findest du in unserer Serie How To Code in Java.

Source:
https://www.digitalocean.com/community/tutorials/understanding-data-types-in-java