Variablen Wie initialisiert man in Java eine Variable ohne das Setzen von 0 oder einer anderen Zahl?

Inkognito

Mitglied
Wie initialisiert man in
Code:
Java
das Setzen einer Integer-Variablen, die keinen Wert enthält und deren Ausgabe beispielsweise
Code:
N/A
wäre? Also, dass diese Variable weder
Code:
0
, noch sonst irgendeinen Wert enthält?
Was mir dabei vorschwebt wäre das Rechnen mit Werten, die sowohl positiv, als auch negativ sein können, wie auch
Code:
0
. Nennt man diesen Wert
Code:
a
und setzt ihn beispielsweise in die Bedingung einer
Code:
if
-Schleife, z.B.
Code:
(a != N/A)
, so soll also diese
Code:
if
-Schleife nur dann ausgeführt werden, wenn es überhaupt einen Wert für
Code:
a
gibt.
Ist so etwas möglich und wenn ja, wie?

[OT]
Off-Topic gelöst!
  1. Warum kann man beim Schreiben von Beiträgen eigentlich keine unterschiedlichen Schriftarten Verwenden? Ich hätte so Java-Code nämlich in „Courier New“ und den anderen Text beispielsweise in „Times New Roman“ dargestellt.
  2. Warum gibt es eigentlich kein Off-Topic Forum, sondern nur die Off-Topic Funktion?
[/OT]
 
Zuletzt bearbeitet:
Wenn ich dich richtig verstehe, gäbe es ein paar Möglichkeiten in deinem Sinne:

Java:
Integer zahl1 = null;
double zahl2 = Double.NaN;

...
if (zahl1 != null) {
    rechne(zahl1);
}

if ( ! Double.isNaN(zahl2)) {
    rechne(zahl2);
}
 
Java:
int i; // hat z.B. keinen wert wenn ich nicht irre.

Und man kann code markieren und ändern. Da gibt es so lustige buttons im Editor... 😉
 
Da deine eigentlichen Fragen bereits beantwortet wurden...
Warum kann man beim Schreiben von Beiträgen eigentlich keine unterschiedlichen Schriftarten Verwenden? Ich hätte so Java-Code nämlich in „Courier New“ und den anderen Text beispielsweise in „Times New Roman“ dargestellt.
Es gibt den [java ] und [c ] Tag (ohne Leerschlag):
Java:
System.out.println("Hello World!");
Ich hab drin ein [c]Foo[/c] und ein [c]Bar[/c].
Warum gibt es eigentlich kein Off-Topic Forum, sondern nur die Off-Topic Funktion?
Es gibt die Plauderecke - java-forum.org
 
KrokoDiehl's Antwort nochmal etwas ausführlicher erklärt:
Primitive Datentypen (boolean, byte, char, short, int, long, float, double) können nicht "keinen Wert" haben. [STRIKE]Sie sind immer irgendwie initialisiert.[/STRIKE] (<- die Formulierung ist blöd, habe sie gestrichen) Die Konstanten NaN bei den Fließkommatypen sind auch ein Wert. Sie werden benutzt, um das Ergebnis von Berechnungen auszudrücken, die unzulässig sind (bspw. Wurzel aus einer Negativen Zahl).

Wenn Du einen Wert "nicht gesetzt" haben willst, dann nim die sog. Wrapper-Typen (Boolean, Byte, Character, Short, Integer, Long, Float, Double). Das sind normale Typen, die man auch null setzen kann.
 
Zuletzt bearbeitet von einem Moderator:
Wenn ich dich richtig verstehe, gäbe es ein paar Möglichkeiten in deinem Sinne:

Java:
Integer zahl1 = null;
double zahl2 = Double.NaN;

...
if (zahl1 != null) {
    rechne(zahl1);
}

if ( ! Double.isNaN(zahl2)) {
    rechne(zahl2);
}

Ok, also gilt für
Code:
Integer
-Variablen (und wohl auch für andere ähnliche Datentypen wie
Code:
Long
usw. (?)) allgemein, dass man sie mit einem
Code:
null;
initialisieren sollte.
Für
Code:
float
gilt dann wahrscheinlich
Code:
Float.NaN;
, so wie für
Code:
double
anscheinend immer
Code:
Double.NaN;
gilt.

Eine Sache noch zu deinem Code:
Java:
if (zahl1 != null) {
    rechne(zahl1);
}

if ( ! Double.isNaN(zahl2)) {
    rechne(zahl2);
}
Meinst du mit
Code:
rechne(zahl1);
und
Code:
rechne(zahl2);
denn irgendeine Rechenopreation, die, wie sie auch immer geartet sein mag, durchgeführt wird? Denn
Code:
rechne();
ist mir nicht bekannt. Ich denke mal du wolltest ersteres damit ausdrücken.

Java:
int i; // hat z.B. keinen wert wenn ich nicht irre.

Und man kann code markieren und ändern. Da gibt es so lustige buttons im Editor... 😉

Nun, anscheinend müssen sie doch mit einem leeren Wert initialisiert werden, wenn ich das richtig verstanden habe.

KrokoDiehl's Antwort nochmal etwas ausführlicher erklärt:
Primitive Datentypen (boolean, byte, char, short, int, long, float, double) können nicht "keinen Wert" haben. [STRIKE]Sie sind immer irgendwie initialisiert.[/STRIKE] (<- die Formulierung ist blöd, habe sie gestrichen) Die Konstanten NaN bei den Fließkommatypen sind auch ein Wert. Sie werden benutzt, um das Ergebnis von Berechnungen auszudrücken, die unzulässig sind (bspw. Wurzel aus einer Negativen Zahl).

Wenn Du einen Wert "nicht gesetzt" haben willst, dann nim die sog. Wrapper-Typen (Boolean, Byte, Character, Short, Integer, Long, Float, Double). Das sind normale Typen, die man auch null setzen kann.

Um noch einmal auf die obige Antwort von KrokoDiehl zu verweisen: Man muss also
Code:
Integer
ganz ausschreiben und kann nicht
Code:
int
schreiben, oder?
Und damit man bei
Code:
double
nicht
Code:
Double.NaN;
schreiben muss, kann man auch einfach eine
Code:
Double
deklarieren und diese dann auf
Code:
null;
setzen, oder?
Also:
Java:
Integer zahl1 = null;
Double zahl2 = null;
 
Ok, also gilt für
Code:
Integer
-Variablen (und wohl auch für andere ähnliche Datentypen wie
Code:
Long
usw. (?)) allgemein, dass man sie mit einem
Code:
null;
initialisieren sollte.
Integer ist eine Klasse, welche einen int beherbergt. Ein int ist ein primitiver Typ. Gleiches mit Boolean <-> boolean, Short <-> short etc.

Meinst du mit
Code:
rechne(zahl1);
und
Code:
rechne(zahl2);
denn irgendeine Rechenopreation, die, wie sie auch immer geartet sein mag, durchgeführt wird?
Richtig.


Nun, anscheinend müssen sie doch mit einem leeren Wert initialisiert werden, wenn ich das richtig verstanden habe.
Eine Klassenvariable wird automatisch mit 0, 0.0, false, ... (je nach Typ) initialisert. Wenn du eine lokale Variable hast, darfst du darauf nicht zugreifen, bevor sie einen Wert besitzt (durch eine Zuweisung).

Um noch einmal auf die obige Antwort von KrokoDiehl zu verweisen: Man muss also
Code:
Integer
ganz ausschreiben und kann nicht
Code:
int
schreiben, oder?
Siehe oben.
Und damit man bei
Code:
double
nicht
Code:
Double.NaN;
schreiben muss, kann man auch einfach eine
Code:
Double
deklarieren und diese dann auf
Code:
null;
setzen, oder?
Richtig.
 
Ich weiß nicht, vielleicht bin ich ja etwas pingelig. Aber ich finde in den Antworten (möglicherweise verursacht durch die Nachfragen des TO) wird hier zuviel default-Initialisierung, magic values usw. vermischt.

Die Ursprungsfrage war ja, wie man primitives initialisieren soll, um den Wert "nicht gesetzt" auszudrücken. Dazu die ganz klare Aussage: Das geht mit primitives nicht! Es läuft bei primitives immer darauf hinaus, dass man sich einen "magic value" ausdenkt, der als "nicht gesetzt" interpretiert wird. Aber auch dieser "magic value" ist eben ein Wert und damit gesetzt. Die einzig zweifelsfreie und semantisch eindeutige Möglichkeit "nicht gesetzt" auszudrücken, ist etwas auf null zu sezten. Und das geht eben nur mit Wrappern.
 
Variablen primitiver Datentypen müssen immer einen Wert haben (initialisiert werden), etwas anderes lässt der Compiler nicht zu. Darüber hinaus gibt es bei Fließkommazahlen bestimmte Werte, die auf eine bestimmte Art interpretiert werden können. Referenzdatentypen können hingegen mit null initialisiert werden.

Attribute und Klassenvariablen werden ohne explizite Angabe initialisiert, für Variablen in Methoden muss dies selbst vorgenommen werden.
 

Zurück
Oben