Почему в 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 имеет>>>=, Должна быть более веская причина для этого упущения.

От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)

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