Удалить панель действий Android по умолчанию [дубликат]

В соответствии с байтовым кодом , полученным из файлов классов,

Оба присваивания увеличивают x, но разница - это время when the value is pushed onto the stack

В Case1, нажатие происходит (а затем назначается позже) до приращения (по существу означает, что ваш приращение ничего не делает)

В Case2 сначала происходит Инкремент (делает его 8), а затем помещается в стек (и затем назначается x)

Случай 1:

int x=7;
x=x++;

Байт-код:

0  bipush 7     //Push 7 onto  stack
2  istore_1 [x] //Pop  7 and store in x
3  iload_1  [x] //Push 7 onto stack
4  iinc 1 1 [x] //Increment x by 1 (x=8)
7  istore_1 [x] //Pop 7 and store in x
8  return       //x now has 7

Случай 2:

int x=7; 
x=++x;

Байт-код

0  bipush 7     //Push 7 onto stack
2  istore_1 [x] //Pop 7 and store in x
3  iinc 1 1 [x] //Increment x by 1 (x=8)
6  iload_1  [x] //Push x onto stack
7  istore_1 [x] //Pop 8 and store in x
8  return       //x now has 8
  • Стек здесь относится к операнду стеку, локальному: x index: 1 type: int

20
задан Community 23 May 2017 в 12:10
поделиться