Dlaczego Java nie ma wersji przypisań złożonych operatorów warunkowych i warunkowych? (&& =, || =)

Tak więc dla operatorów binarnych na booleanach Java ma&, |, ^, && i||.

Podsumujmy, co oni tutaj krótko robią:

JLS 15.22.2 Logiczne operatory logiczne &, ^ i |JLS 15.23 Warunkowo-operator i &JLS 15.24 Warunkowy lub operator ||

Dla&, wartością wyniku jesttrue jeśli obie wartości operandu sątrue; w przeciwnym razie wynik jestfalse.

Dla|, wartością wyniku jestfalse jeśli obie wartości operandu sąfalse; w przeciwnym razie wynik jesttrue.

Dla^, wartością wyniku jesttrue jeśli wartości operandu są różne; w przeciwnym razie wynik jestfalse.

The&& operator jest jak& ale ocenia swój prawy argument operacji tylko wtedy, gdy wartość jego argumentu po lewej stronie totrue.

The|| operator jest jak|, ale ocenia swój prawy operand tylko wtedy, gdy wartość jego argumentu po lewej stronie tofalse.

Teraz spośród wszystkich 5, 3 z nich mają wersje przypisania złożonego, a mianowicie|=, &= i^=. Moje pytanie jest więc oczywiste: dlaczego Java nie zapewnia&&= i||= także? Uważam, że potrzebuję więcej niż potrzebuję&= i|=.

I nie sądzę, że „ponieważ jest za długi” to dobra odpowiedź, ponieważ Java ma>>>=. Musi istnieć lepszy powód takiego pominięcia.

Z15.26 Operatorzy przypisania:

Istnieje 12 operatorów przypisania; [...]= *= /= %= += -= <<= >>= >>>= &= ^= |=

Stwierdzono, że jeśli&&= i||= Zostały zaimplementowane, wtedy jedynymi operatorami, którzy nie oceniają pierwszej strony po raz pierwszy. Uważam, że ten pogląd, że operator przypisania złożonego ocenia najpierw prawą stronę, jest błędem.

Z15.26.2 Operatorzy przypisania złożonego:

Wyrażenie przydziału formularza w formularzuE1 op= E2 jest równaE1 = (T)((E1) op (E2)), gdzieT jest typemE1, oprócz tegoE1 jest oceniany tylko raz.

Jako dowód, poniższy fragment rzuca aNullPointerException, nieArrayIndexOutOfBoundsException.

    int[] a = null;
    int[] b = {};
    a[0] += b[-1];

questionAnswers(11)

yourAnswerToTheQuestion