В Си, если не пометить переменную как volitile, то можно надеяться, что в следующем коде чтение элемента массива произойдёт только один раз:
struct foo {
int a;
int b;
int c;
};
int square(const struct foo *foo, int i) {
return foo[i].a + foo[i].b + foo[i].c;
}
что убирает необходимость введения промежуточной переменной.
Godbolt это подтверждает:
square:
movsx rsi, esi
lea rax, [rsi+rsi*2]
lea rdx, [rdi+rax*4]
mov eax, DWORD PTR [rdx+4]
add eax, DWORD PTR [rdx]
add eax, DWORD PTR [rdx+8]
ret
А как получить этот же эффект в Java?