¿Por qué Java no tiene versiones de asignación compuestas de los operadores condicionales y condicionales? (&& =, || =)

Así que para los operadores binarios en booleanos, Java tiene&, |, ^, && y||.

Vamos a resumir lo que hacen brevemente aquí:

JLS 15.22.2 Operadores lógicos booleanos &, ^, y |JLS 15.23 Condicional y Operador &&JLS 15.24 Operador O Condicional ||

por&, el valor del resultado estrue si ambos valores de operando sontrue; de lo contrario, el resultado esfalse.

por|, el valor del resultado esfalse si ambos valores de operando sonfalse; de lo contrario, el resultado estrue.

por^, el valor del resultado estrue si los valores del operando son diferentes; de lo contrario, el resultado esfalse.

los&& operador es como& pero evalúa su operando de la mano derecha solo si el valor de su operando de la izquierda estrue.

los|| operador es como|, pero evalúa su operando de la mano derecha solo si el valor de su operando de la izquierda esfalse.

Ahora, entre los 5, 3 de ellos tienen versiones de asignación compuesta, a saber:|=, &= y^=. Así que mi pregunta es obvia: ¿por qué Java no proporciona&&= y||= ¿también? Encuentro que necesito más de lo que necesito.&= y|=.

Y no creo que "porque es demasiado largo" sea una buena respuesta, porque Java tiene>>>=. Debe haber una mejor razón para esta omisión.

Desde15.26 Operadores de Asignaciones:

Hay 12 operadores de asignación; [...]= *= /= %= += -= <<= >>= >>>= &= ^= |=

Se hizo un comentario que si&&= y||= fueron implementados, entonces serían los únicos operadores que no evalúan primero el lado derecho. Creo que esta noción de que un operador de asignación compuesta evalúa primero el lado derecho es un error.

Desde15.26.2 Operadores de asignación de compuestos:

Una expresión de asignación compuesta de la forma.E1 op= E2 es equivalente aE1 = (T)((E1) op (E2)), dóndeT es el tipo deE1, excepto esoE1 Se evalúa una sola vez.

Como prueba, el siguiente fragmento arroja unNullPointerException, no unArrayIndexOutOfBoundsException.

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

Respuestas a la pregunta(11)

Su respuesta a la pregunta