Ponieważ token = w Javie oznacza przypisanie, a nie wywołanie funkcji (poza pewnymi transparentnymi dla programisty przypadkami). Dodatkowo w Javie mamy autoboxing. A więc:
dupa = true;
To w rzeczywistości:
dupa = new Boolean(true);
W Javie przekazujesz kopię referencji albo kopię prymitywu. Tak czy siak, oryginalnej referencji czy prymitywu nie zmienisz. Dlatego, aby np zwrócić kilka wartości z funkcji trzeba użyć obiektu opakowujacego. Przykładowy kod:
class Holder<A> {
private A value;
public Holder() {
}
public Holder(A value) {
this.value = value;
}
public A getValue() {
return value;
}
public void setValue(A value) {
this.value = value;
}
}
public class Main {
void policzPierwiastki(double a, double b, double c, Holder<Double> x1, Holder<Double> x2) {
double wyróżnik = b * b - 4 * a * c;
x1.setValue((-b - Math.sqrt(wyróżnik)) / (2 * a));
x2.setValue((-b + Math.sqrt(wyróżnik)) / (2 * a));
}
void run() {
Holder<Double> x1 = new Holder<Double>();
Holder<Double> x2 = new Holder<Double>();
policzPierwiastki(1, -8, 15, x1, x2);
System.out.println(x1.getValue() + " " + x2.getValue());
}
public static void main(String[] args) {
new Main().run();
}
}