Делает ли минус, предшествующий переменной, первую переменную отрицательной? - PullRequest
0 голосов
/ 26 июня 2019

Нас просят использовать переменные типа int, чтобы сделать ответ равным 20. Предполагается, что мы должны только изменить расположение плюсов и минусов. У них есть минус перед int a. Это делает int отрицательным?

Я погуглил ответ, но мой Googlefu не на высоте.

public static int a = 1;
public static int b = 3;
public static int c = 9;
public static int d = 27;

public static void main(String[] args) {

    int result = - a + b - c + d;
}

Ответы [ 2 ]

4 голосов
/ 26 июня 2019

В выражении:

- a + b - c + d

есть 3 разных оператора, идущих слева направо:

Как правило, унарные операторы имеют более высокий приоритет, чем бинарные операторы, поэтому это выражение эквивалентно:

(( (- a) + b) - c) + d

Итак, унарный - относится к a. Из приведенной выше спецификации:

Во время выполнения значение унарного минус-выражения представляет собой арифметическое отрицание повышенного значения операнда.

Таким образом, оно не делает a отрицательным, оно приводит к выражению, значением которого является отрицание a. Это бывает отрицательно, потому что a имеет положительное значение. Тем не менее, ничего не делает a, a остается без изменений.

0 голосов
/ 26 июня 2019

Единственный способ на самом деле сделать отрицательным - это переназначить его:

a = -a;

Для более подробного ответа, пожалуйста, посмотрите спецификацию языка Java, где вы можетенайдите подробную информацию о том, как операторы и выражения оцениваются в Java (в вашем случае: https://docs.oracle.com/javase/specs/jls/se12/html/jls-15.html#jls-15.15.4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...