W tym zadaniu kluczowe jest rozróżnienie, co dzieje się "teraz", a co jest efektem ubocznym po użyciu operatora.
Po inicjalizacji var a = 5; zmienna a ma wartość 5.
Następnie wykonywana jest linia przypisująca wartość do b z użyciem operatora dekrementacji w wersji post. Postdekrementacja działa tak, że:
- najpierw zwraca "starą" wartość zmiennej (tę sprzed zmiany),
- a dopiero potem zmienia zmienną (zmniejsza ją o 1).
Dlatego do b zostaje podstawione 5, a a po tej operacji ma już wartość 4.
Kolejna instrukcja a *= 3; jest przypisaniem złożonym, czyli skrótem od a = a * 3;. Skoro w tym momencie a wynosi 4, to po przemnożeniu przez 3 otrzymujemy 12.
Ostatnia linia wypisuje wynik jako napis: a + "," + b. To nie jest dodawanie liczb, tylko konkatenacja łańcuchów (doklejanie tekstu), więc na ekran trafia dokładnie tekst 12,5.
Dlaczego pozostałe odpowiedzi są błędne? Wartości z "12,4" zwykle wynikają z pomylenia postdekrementacji z innym operatorem, a warianty "15,4" i "15,5" biorą się z błędnego założenia, że najpierw mnożymy 5 przez 3 lub że dekrementacja wpływa na b przed przypisaniem.