Почему значение «i» не изменяется после выполнения «логического t = true, b; b = (t || ((i ++) == 0))» - PullRequest
2 голосов
/ 12 октября 2019
  int i = 0;
  boolean t = true;
  boolean f = false, b;
  b = (t || ((i++) == 0));
  b = (f || ((i+=2) > 0));
  System.out.println(i);

После выполнения вышеуказанного кода результат печати равен 2, а не 3, почему?

Я считаю, что "i" было 0, а не 1 после "b = (t || ((i ++) == 0)) "выполняется путем отладки. Хорошо, я запутался, почему« i ++ »не меняет« i ».

1 Ответ

13 голосов
/ 12 октября 2019

Что ж, я запутался, почему «i ++» не меняет «i».

Поскольку i++ не выполняется в предоставленном вами коде.

В выражении вида a || b сначала оценивается a, и, если оно истинно (в данном случае это так), выражение b не оценивается . Это называется короткое замыкание .

Это описано в разделе JLS 15.24 .

Если вы измените код, чтобы использовать невместо этого оператор короткого замыкания |, например:

b = (t | ((i++) == 0));

... тогда он будет вычислять оба операнда независимо.

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