Почему в Java нет составных версий условных и условных операторов? (&& =, || =)

Так что для бинарных операторов на логических, Java имеет&, |, ^, && а также||.

Давайте подведем итог, что они делают здесь кратко:

JLS 15.22.2 Логические логические операторы &, ^, и |JLS 15.23 Условно-операторный оператор &&JLS 15.24 Оператор условного или ||

За&, значение результатаtrue если оба значения операндаtrue; в противном случае результатfalse.

За|, значение результатаfalse если оба значения операндаfalse; в противном случае результатtrue.

За^, значение результатаtrue если значения операндов различны; в противном случае результатfalse.

&& оператор как& но оценивает его правый операнд, только если значение его левого операндаtrue.

|| оператор как|, но оценивает свой правый операнд, только если значение его левого операндаfalse.

Теперь среди всех 5, 3 из них есть составные версии назначений, а именно|=, &= а также^=, Поэтому мой вопрос очевиден: почему Java не предоставляет&&= а также||= также? Я считаю, что мне нужно больше, чем мне нужно&= а также|=.

И я не думаю, что «потому что это слишком долго» является хорошим ответом, потому что Java имеет>>>=, Должна быть более веская причина для этого упущения.

От15.26 Операторы присваивания:

Есть 12 операторов присваивания; [...]= *= /= %= += -= <<= >>= >>>= &= ^= |=

Был сделан комментарий, что если&&= а также||= были бы реализованы, тогда это были бы единственные операторы, которые не оценивают правую часть в первую очередь. Я считаю, что представление о том, что составной оператор присваивания сначала оценивает правую часть, является ошибкой.

От15.26.2 Составные операторы присваивания:

Составное выражение присваивания формыE1 op= E2 эквивалентноE1 = (T)((E1) op (E2)), гдеT это типE1, Кроме этогоE1 оценивается только один раз.

В качестве доказательства следующий фрагмент кодаNullPointerExceptionнеArrayIndexOutOfBoundsException.

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

Ответы на вопрос(11)

Ваш ответ на вопрос