Что ж, я запутался, почему «i ++» не меняет «i».
Поскольку i++
не выполняется в предоставленном вами коде.
В выражении вида a || b
сначала оценивается a
, и, если оно истинно (в данном случае это так), выражение b
не оценивается . Это называется короткое замыкание .
Это описано в разделе JLS 15.24 .
Если вы измените код, чтобы использовать невместо этого оператор короткого замыкания |
, например:
b = (t | ((i++) == 0));
... тогда он будет вычислять оба операнда независимо.