Kurzschreibweise

Ich bin gerade in den Anfängen und habe da ein Verständnisproblem.
Die Kurzschreibweise a*=b ist ja die Kurzform von a=a*b
Gebe ich z.B mit
float a=3
a*=1/2
ein kommt als Ergebnis 0 raus.Wieso?Ist dies nicht dann ausgeschrieben a=3*1/2?

Moin

float a=3
a*=1/2
ein kommt als Ergebnis 0 raus.Wieso?

Ja, der ist tricky:

1/2 wird als (integer 1) / (integer 2) verstanden. Bei der Integer-Division kommt 0 raus. Das wird dann zu float umgewandelt (bleibt also 0) und mit a multipliziert. => kommt 0 raus.

a*= ((float) 1) / ((float) 2)

bringt das richtige Resultat. (1.0/2.0 oder 1f/2f reichen je nach compilier)

cu

bringt das richtige Resultat. (1.0/2.0 oder 1f/2f reichen je
nach compilier)

Das hängt nicht vom Compiler ab. Sofern er nciht die Java Language Specification verletzt ist 1.0 ein double und 1f ein float.
Man kann sich also drauf verlassen dass das so funktioniert. Oder gleich einfach 0.5 schreiben :smile:

Moin

Das hängt nicht vom Compiler ab. Sofern er nciht die Java
Language Specification verletzt ist 1.0 ein double und 1f ein
float.

du kennst den Microsoft-compiler also noch nicht …

cu

Moin

Das hängt nicht vom Compiler ab. Sofern er nciht die Java
Language Specification verletzt ist 1.0 ein double und 1f ein
float.

du kennst den Microsoft-compiler also noch nicht …

dann ist das allerdings ein problem von ms und nicht von java. wenn es ms nicht gebacken bekommt, kann man damit halt nicht entwickeln.