Tôi đã có câu hỏi rất giống nhau trong một thời gian dài. Vì vậy, tôi đã thử nghiệm một đoạn mã thậm chí đơn giản hơn.  
Kết luận: Đối với những trường hợp như vậy , KHÔNG có sự khác biệt về hiệu suất.
Trường hợp vòng lặp bên ngoài
int intermediateResult;
for(int i=0; i < 1000; i++){
    intermediateResult = i+2;
    System.out.println(intermediateResult);
}
Trường hợp vòng lặp bên trong
for(int i=0; i < 1000; i++){
    int intermediateResult = i+2;
    System.out.println(intermediateResult);
}
Tôi đã kiểm tra tệp đã biên dịch trên trình dịch ngược của IntelliJ và trong cả hai trường hợp, tôi đều nhận được cùng một Test.class
for(int i = 0; i < 1000; ++i) {
    int intermediateResult = i + 2;
    System.out.println(intermediateResult);
}
Tôi cũng đã phân tách mã cho cả hai trường hợp bằng cách sử dụng phương thức được đưa ra trong câu trả lời này . Tôi sẽ chỉ hiển thị những phần có liên quan đến câu trả lời
Trường hợp vòng lặp bên ngoài
Code:
  stack=2, locals=3, args_size=1
     0: iconst_0
     1: istore_2
     2: iload_2
     3: sipush        1000
     6: if_icmpge     26
     9: iload_2
    10: iconst_2
    11: iadd
    12: istore_1
    13: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
    16: iload_1
    17: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
    20: iinc          2, 1
    23: goto          2
    26: return
LocalVariableTable:
        Start  Length  Slot  Name   Signature
           13      13     1 intermediateResult   I
            2      24     2     i   I
            0      27     0  args   [Ljava/lang/String;
Trường hợp vòng lặp bên trong
Code:
      stack=2, locals=3, args_size=1
         0: iconst_0
         1: istore_1
         2: iload_1
         3: sipush        1000
         6: if_icmpge     26
         9: iload_1
        10: iconst_2
        11: iadd
        12: istore_2
        13: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
        16: iload_2
        17: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
        20: iinc          1, 1
        23: goto          2
        26: return
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           13       7     2 intermediateResult   I
            2      24     1     i   I
            0      27     0  args   [Ljava/lang/String;
Nếu bạn chú ý kỹ, chỉ có phần Slotđược gán ivà intermediateResultin LocalVariableTableđược hoán đổi như một sản phẩm theo thứ tự xuất hiện của chúng. Sự khác biệt tương tự về vị trí được phản ánh trong các dòng mã khác.
- Không có hoạt động bổ sung đang được thực hiện
 
intermediateResult vẫn là một biến cục bộ trong cả hai trường hợp, vì vậy không có thời gian truy cập khác nhau. 
TẶNG KEM  
Trình biên dịch thực hiện rất nhiều tối ưu hóa, hãy xem những gì xảy ra trong trường hợp này.
Không có trường hợp làm việc
for(int i=0; i < 1000; i++){
    int intermediateResult = i;
    System.out.println(intermediateResult);
}
Không có công việc dịch ngược
for(int i = 0; i < 1000; ++i) {
    System.out.println(i);
}