publicclassProgramm{publicstaticvoidmain(String[] args){A a =newA();A b =newB();A c =newC();
a.setVar(10);
b.setVar(3);
c.setVar(b.getVar());
a.printVar();
b.printVar();
c.printVar();}}
Na ja, aber einen gewissen Ablauf mit diversen Methodenaufrufen wirst du doch erkannt haben ... Und das sollte deine Frage besser beantworten als viele Worte. Du musst natürlich schrittweise durchgehen.
Ich komme durcheinander wenn ich alles auseinander nehme
Auf jeden Fall -was ich rauslese ist folgendes - Schritt für Schritt:
c.setVar() = b.getVar()
da super.setVar(getVar()) -> gehe in Klasse B
Wurde bisher kein Wert übergeben
setVar-Methode in Klasse B:
this.var = var; //(immer noch kein Wert..)
super.setVar(2*var); -> 2* kein Wert
-> Klasse A
Ausgabe: kein Wert
Vielleicht stelle ich die falsche Frage..
Wird in Java ab einem gewissen "geschehen" irgendwann der Wert 0 einfach zugewiesen oder so?
Der Ablauf ist ja ok. Aber was haben denn die Instanzvariablen für einen Wert wenn sie eben noch keinen Wert zugewiesen haben ? Kannst du dir im Debugger auch anschauen
Ich versteh´s nicht. Wenn da nichts initialisert worden ist, sollte doch eine Fehlermeldung oder zumindest eine Speicheradresse kommen. Szenario:
Wenn ich in die Klasse "Programm" gehe und schreibe
Code:
A d = new C();
s.setVar(b.getVar());
System.out.println(d);
Dann kommt die Speicheradresse. Wenn ich es über die print-Methode ausgeben lasse:
Code:
d.printVar();
dann kommt wieder 0 raus.
Was ist denn der Unterschied wenn ich es im Hauptprogramm über syso ausgeben lasse oder über die print-Methode mit der System.out.println(var); ?
Im Grunde wird ja die "Variable-ohne-Wert" einem weiteren Variable zugeordnet...
Ah..grad vorhin zum ersten mal drüber gestolpert Stichwort Default-Wert?
Damit versuchst du die Instanz d von der Klasse A auszugeben. Das bewirkt dass in der Vererbungshierchie der Klasse A nach der Methode toString() gesucht wird und deren Returnwert wird ausgegeben. Wenn keine andere gefunden wird dann landet er bei Object und dort gibt toString() halt die Speicheradresse aus.
Ah, hab´s nicht auf englisch versucht^^'. Okay, aber eine Sache finde ich noch verwirrend, folgende Aussage:
" By default, the int data type is a 32-bit signed two's complement integer, which has a minimum value of -231 and a maximum value of 231-1. In Java SE 8 and later, you can use the int data type to represent an unsigned 32-bit integer, which has a minimum value of 0 and a maximum value of 2²³-1."
Kann doch aber weiterhin in int <0-Werte zuweisen.
Das ist richtig, aber wenn du den Satz weiter liest:
See the section The Number Classes for more information. Static methods like compareUnsigned, divideUnsigned etc have been added to the Integer class to support the arithmetic operations for unsigned integers.
es bleibt weiterhin ein int, die Integer klasse wurde eben nur um Methoden erweitern, welche den übergebenen int eben so behandeln als wäre er ein unsigned int.
Ob nun signed oder unsigned, ein int bleibt eben einfach nur ein bündel an einsen und nullen, es kommt nur drauf an wie man es interpretiert.
Okay, zum Verständnis:
signed = positive sowohl negative Werte
unsigend = (große) positive Werte
Muss das explizit definiert werden oder wird das von Java impliziert je nach Zuweisung?
Von was redet ihr ? Ein int ist ein Datentyp mit einem bestimmten Wertebereich und kann selbstverständlich negative Werte enthalten. Was willst du damit sagen: es kommt darauf an wie man es interpretiert?
Von was redet ihr ? Ein int ist ein Datentyp mit einem bestimmten Wertebereich und kann selbstverständlich negative Werte enthalten. Was willst du damit sagen: es kommt darauf an wie man es interpretiert?
Das ist natürlich richtig, aber in Java 8 wurden ein paar Methoden hinzugefügt, welche so tun als hätte der übergebene Parameter kein vorzeichen, d.h. sie interpretieren den Parameter eben als unsigned int. z.b. https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#compareUnsigned-int-int-
int bleibt natürlich int, aber man kann wenn man unbedingt will, das natürlich auch anders interpretieren, wie es z.b. diese Methoden machen.
p.s. wie der TE von seiner ursprüngliche Frage auf dieses Thema gekommen ist, weiß ich auch nicht^^
public static int compareUnsigned(int x,
int y)
Compares two int values numerically treating the values as unsigned.
Parameters:
x - the first int to compare
y - the second int to compare
Returns:
the value 0 if x == y; a value less than 0 if x < y as unsigned values; and a value greater than 0 if x > y as unsigned values
Ja, irgendwie alles.
1. Wenn x == y ist, dann return 0; ? In jedem Fall zutreffend? Also auch bei 55555 == 55555?
2.Wenn x < y, dann ein Wert < 0 ? Die Rede ist immer noch von unsinged und unsinged sind doch quasi absolute Werte?
3. Wenn x > y, dann ein Wert > 0. Also ein absoluter Wert.