Frage zum Aufruf überladener Methoden

Overskill

Aktives Mitglied
Hey wenn ich folgendes Konstrukt habe :

Java:
public class MethodenOver {
	
	
		public static void meth(long x, long y, long z) {
		System.out.println("long, long, long");
		}
		public static void meth(double x, long y, double z) {
		System.out.println("double, long, double");
		}
		public static void main (String[] args) {
		long x = 333;
		double y = 4.44;

		meth(y,x,x); // Aufruf double long double
		}
		}

Wieso kann hier double, long, double aufgerufen werden? Passen beide Methoden nicht gleich gut ?
Bei "meth1" passt ja: das double nicht, long passt, long passt
Bei "meth2" passt ja: das double, long passt, long passt nicht

mfg Overskill
 
Zuletzt bearbeitet:
Das liegt daran weil Java den Datentyp long implizit in den Datentyp double umwandelt.

Die Reihenfolge ist:

byte->short->int->long->float->double

Alles was in der Pfeilrichtung geht wird von Java implizit gemacht, also wenn du jetzt beispielsweise eine Int Variable in einer float Variable abspeicherst.
Gegen die Pfeilrichtung muss explizit umgewandelt werden. Liegt einfach daran, dass wenn du es gegen ie PFeilrichtung machst, du es in einem kleineren Speicherbereich abspeicherst als Ursprünglich und dabei Daten verloren gehen könnten.
 
long und double speichern die Werte in einer anderen Struktur.
Long ist hierbei ganz stumpf binärdarstellung und das kannste dann einfach in eine Dezimalzahl umrechnen.
Double setzt zusammen aus vorzeichen Mantisse und Exponent.
Nur noch mal so als Zusatzinformation 😀
 

Zurück
Oben