Что выведет на консоль следующий код:

public class Main {
    public static void main (String []args) {
        int i = 0;
        i += i++;
        System.out.println(i);
    }	
}
Explanation
JLS $15.7.1. Составной оператор присваивания эквивалентен i = i + i++ и вычисляется соответственно. Инкремент произойдет после взятия значения из i, но перед присваиванием. Если кому-то интересно, вот opcode:

   0:	iconst_0
   1:	istore_1
   2:	iload_1
   3:	iload_1
   4:	iinc	1, 1
   7:	iadd
   8:	istore_1
Первые 2 мнемоники - push значения 0 на стек, следующие 2 - pop значения со стека дважды, строка 4 - инкремент, строка 7 - сложение 0+0=0 и push на стек, строка 8 - запись значения из стека

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Java
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты