That entirely depends on what getInstructions() does. If it's just returning the value of a field - and if you're confident that the field value won't change between calls - then you probably won't see any efficiency differences between the two snippets.
If, on the other hand, getInstructions() needs to make a dozen web requests, then clearly you want to avoid calling that several times.
Readability is more important than efficiency though. In this case I find the second option more readable anyway - it's clearer that you want to take three separate steps (two method calls and a loop) with the same value. On the other hand, I'm quite happy to write something like:
for (int i = 0; i < text.length(); i++) {
...
}
rather than breaking that out into a separate variable:
int length;
for (int i = 0; i < length; i++) {
...
}
It really depends on the context. Sometimes an extra variable helps, sometimes it doesn't, from a readability perspective. The efficiency perspective depends completely on what the method call is doing, and whether it's "inlinable" for the JIT.