Operatoren und Rangfolgen

fl4$h g0rd0n
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 115
Registriert: 1. Okt 2007 22:20

Operatoren und Rangfolgen

Beitrag von fl4$h g0rd0n »

Hallo,

müssen wir für die Klausur die Priorität und Assoziativität eines jeden Operators auswendig kennen? (Siehe etwa T15-20)
D. h., könnten Aufgaben vorkommen, in denen verlangt wird, komplexere Ausdrücke per Hand auszuwerten, die sich nicht intuitiv lösen lassen, sondern nur mit sehr detaillierter Kenntnis von Javas Auswertungsregeln?

Bsp:

Code: Alles auswählen

int z = 12;
//intuitiv: rechte seite auswerten (14 + 12), dann zu z (mittlerweile 14) addieren: 40
z += ++z + z++; //tatsächlich: z = (int)(12 + 13 + 13) : 38
System.out.println(z); 
"Education is the path from cocky ignorance to miserable uncertainty" -- Mark Twain

Benutzeravatar
guido
Computerversteher
Computerversteher
Beiträge: 380
Registriert: 30. Nov 2003 21:24
Wohnort: Mühltal
Kontaktdaten:

Re: Operatoren und Rangfolgen

Beitrag von guido »

fl4$h g0rd0n hat geschrieben:Hallo,

müssen wir für die Klausur die Priorität und Assoziativität eines jeden Operators auswendig kennen? (Siehe etwa T15-20)
D. h., könnten Aufgaben vorkommen, in denen verlangt wird, komplexere Ausdrücke per Hand auszuwerten, die sich nicht intuitiv lösen lassen, sondern nur mit sehr detaillierter Kenntnis von Javas Auswertungsregeln?

Bsp:

Code: Alles auswählen

int z = 12;
//intuitiv: rechte seite auswerten (14 + 12), dann zu z (mittlerweile 14) addieren: 40
z += ++z + z++; //tatsächlich: z = (int)(12 + 13 + 13) : 38
System.out.println(z); 
Mit solchen Aufgaben würde ich nicht rechnen... :)

Guido

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Operatoren und Rangfolgen

Beitrag von Krümelmonster »

Was mich aber trotzdem gerade verwundert ist, dass z = z++; den Wert von z nicht ändert.

Liegt das daran, dass diese Syntax vom Compiler erst in eine Objektsyntax umgewandelt wird,
wodurch also für das z auf der rechten Seite ein neues Objekt erstellt wird, auf dem
dann die Inkrementierung durchgeführt wird?
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

fl4$h g0rd0n
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 115
Registriert: 1. Okt 2007 22:20

Re: Operatoren und Rangfolgen

Beitrag von fl4$h g0rd0n »

Man kann den Postinkrement als folgende Funktion auffassen (Achtung, kein richtiges Java, nur zur Veranschaulichung):

Code: Alles auswählen

static int postInc(int theInt)
{
   int oldValue = theInt; //Merke den alten Wert
   
   theInt = theInt + 1; //Wir lassen hier mal außer Acht, dass Java eine Copy-By-Value Semantik hat ;-)

   return oldValue; //Die Variable wurde inkrementiert, aber der vorherige Wert wird zurückgegeben
}

z = postInc(z);
Das heißt, z wird zwischenzeitlich durchaus inkrementiert, nur wird es daraufhin wieder mit dem vorherigen Wert überschrieben.
"Education is the path from cocky ignorance to miserable uncertainty" -- Mark Twain

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Re: Operatoren und Rangfolgen

Beitrag von Krümelmonster »

Ok, das macht Sinn.

Btw: Wie würde man denn in Java eine Zahl als Referenz übergeben?
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

fl4$h g0rd0n
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 115
Registriert: 1. Okt 2007 22:20

Re: Operatoren und Rangfolgen

Beitrag von fl4$h g0rd0n »

Echte Referenzen auf primitive Variablen, wie bspw. in C++, gibt es meines Wissens nicht in Java.
Du müsstest die primitiven Werte in einem Referenztyp wrappen, über den man auch Werte ändern kann. Integer, Double etc. leisten dies z. B. nicht.
Die Manipulation durch den Wrapper würde sich auch nur auf dessen interne Kopie des prim. Wertes auswirken, nicht auf die Variable, aus welcher der Wrapper ursprünglich erzeugt wurde. (Ist also auch kein echtes "Wrappen")
"Education is the path from cocky ignorance to miserable uncertainty" -- Mark Twain

Antworten

Zurück zu „Archiv“