Это код:Почему выход -120?
public class Boy {
public static void main(String[] args) {
int i = 12;
System.out.print(i += i -= i *= i);
}
}
Почему выход -120, как увидеть выполняющую деталь Что шаг за шагом процедуры?
Это код:Почему выход -120?
public class Boy {
public static void main(String[] args) {
int i = 12;
System.out.print(i += i -= i *= i);
}
}
Почему выход -120, как увидеть выполняющую деталь Что шаг за шагом процедуры?
Вот три вещи, которые вам нужно знать:
Выражения оцениваются слева направо.
2 операнда бинарного оператора оцениваются до применения оператора.
В сложном операторе присваивания (например, + =, - =, * =) исходное значение левого операнда (того, для которого вы назначаете результат) сохраняется до выполнения операции.
Теперь давайте оценивать
i += i -= i *= i
Первый оператор + =. Его первый операнд равен 12, а его второй операнд - i -= i *= i
- должны быть оценены, прежде чем мы сможем оценить + =
Таким образом, мы переходим к оценке
i -= i *= i
Первый операнд является 12, а второй является i *= i
. Мы должны оценить, что второй операнд, прежде чем мы можем оценить - =
Двигаемся
i *= i
Первый операнд равен 12, а второй операнд равен 12, таким образом мы получаем 144.
Теперь вернемся к
i -= 144
Как вы помните, первый операнд был 12, поэтому мы получаем 12 - 144 = -132.
Теперь вернемся к
i += -132
Первый операнд был 12, таким образом мы получаем 12 + -132 = -120, который является конечным значение, присвоенное I.
Спасибо Эрану за правильный ответ. –
Благодарим вас за терпение. @ Eran – Dolphin
Это из-за приоритета Calcul
я * I = 144
затем
я + I = 12 + 12 = 24
и, наконец,
II = 24 -144 = -120
Шаг за шагом было бы написать операторы. –
SO здесь не для того, чтобы делать домашние задания для вас. – AntoineB
есть ............ – Ivaro18