Jest to bardziej teoretyczne pytanie, aby zrozumieć ocenę arytmetyczną Javy. Ponieważ +
i -
mają takie samo pierwszeństwo, nie do końca rozumiem, w jaki sposób Java analizuje następujące wyrażenia (gdzie jest więcej niż jeden operator +
i -
między dwoma operandami).Pierwszeństwo Java dla wielu operatorów + i -
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a+-b); // results in -1
System.out.println(a-+b); // results in -1
System.out.println(a+-+b); // results in -1
System.out.println(a-+-b); // results in 3
System.out.println(a-+-+b); // results in 3
System.out.println(a+-+-b); // results in 3
System.out.println(a-+-+-b); // results in -1
System.out.println(a+-+-+b); // results in 3
}
Z 8 język Java Specification (§15.8.2)
operator wykonuje binarne + dodatek, gdy stosuje się dwa operandy typu liczbowego, dając sumę operandów.
Operator binarny wykonuje odejmowanie, tworząc różnicę dwóch operandów liczbowych.
[...]
Dodawanie jest operacją przemienną, jeśli wyrażenia operandowe nie mają skutków ubocznych.
Dodawanie całkowe jest asocjacyjne, gdy wszystkie operandy są tego samego typu.
Co zauważyłem, to to, że za każdym razem, gdy #operator jest równy, wynik jest taki sam, a kolejność nie ma znaczenia. Ale gdy #operator jest dziwny, nie musi to wpływać na wynik. Na przykład. w poniższych dwóch wyrażeniach jest jeszcze jeden -
niż +
, jednak wynik jest inny.
System.out.println(a-+-b); // results in 3
System.out.println(a-+-+-b); // results in -1
Przy tych wszystkich informacjach nadal nie widzę wzoru ani sposobu, w jaki to działa.
wierzę * a + -b * jest wykonywane jako * a + (-b) *. sprawdzanie go –
@Sanket Makani '-' i '++' nie są dozwolone w tym przypadku ponieważ Java bierze to za operację inkrementacji/dekrementacji – ncw