Auto. Typumwandlung bei a / 2?

Status
Nicht offen für weitere Antworten.

Griffin

Bekanntes Mitglied
Schaut euch mal folgenden Code an:

Code:
public class IntTest {
	public static void main(String args[]) {
		int a = 5;
		int b = a / 2;
		System.out.println("" + b);
	}
}

Bei der Division entsteht 2.5!! Aber b nimmt das ohne Probleme an. Warum geschieht hier das ad hoc casting? Wäre es hier nicht besser, wenn man den Programmierer warnt, dass der Wertebereich verlassen wird!?
Das ist doch eine mögliche Fehlerquelle, wenn man mal nicht aufpasst hat man plötzlich andere Zahlen bei einer Rechnung, als eigentlich erwartet. Besonders, weil die Ausgabe dieses Programms 2 ist! Es wird also abgerundet.

Also ich hätte jetzt mit einer Fehlermeldung gerechnet. Und logischer wäre, wenn b zu einem float bzw. double werden würde. Obwohl das wieder weitere Fehler im Code verrusachen könnte.
:bahnhof:
 
R

Roar

Gast
der compiler weiß doch eigentlich nicht weochen wert die variable a hat. der achtet darauf nicht, da es ja auch sein kann, dass a verändert wird währemnd der laufzeit. der guckt nur ob das ein int ist, sonst nichts. denn wenn der warnen würde, würde das ja bedeuten, dass der den code schon ausführt, aber das soll er ja nicht.
 

Griffin

Bekanntes Mitglied
Naja :/
verändert man den code so:
Code:
int b = 5 / 2;
Sagt der auch nichts dagegen. D.h. er prüft ja gar nicht, was bei der berechnung geschieht sondern nur, ob alle Werte ints sind!
Find ich zwar nicht so toll, muss ich wohl mit leben ;)
 

meez

Top Contributor
Griffin hat gesagt.:
Find ich zwar nicht so toll, muss ich wohl mit leben ;)

Anderst gehts ja nicht...
Wenns vor dem Kompilieren schon laufen (gecheckt) würde, dann bräuchte es keinen Compiler mehr...;)
 

thE_29

Top Contributor
aber wenn du das machst :)

Code:
 int b = 5 / 2.0;

hast du nen genaugikeitsverlust ;)

der compiler sieht ja nur nach ob es jetzt eine ganzzahlige Zahl ist oder eine kommazahl, aber nicht wie dein ergebnis ausschaut!
 

foobar

Top Contributor
Eine arithemtische Operation in Java, hat als Ergebnis immer mindestens einen int. Falls du einen double als Ergebnis haben willst, mußt du so vorgehen wie the_29 es gemacht hat.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben