1

我尝试了以下代码:

class testingFinally {
  public static String getMessage() {
    String s = "hi";
    try {
        return s;
    } finally {
        s = null;
    }
  }

 public static void main(String a[]) {
    System.out.println(getMessage());
 }
}

输出很明显 "hi"。但是当我使用 来查看字节码时javap -v,我得到了以下信息。

public static java.lang.String getMessage();
descriptor: ()Ljava/lang/String;
flags: ACC_PUBLIC, ACC_STATIC
Code:
  stack=1, locals=3, args_size=0
     0: ldc           #16                 // String hi
     2: astore_0
     3: aload_0
     4: astore_2
     5: aconst_null
     6: astore_0
     7: aload_2
     8: areturn
     9: astore_1
    10: aconst_null
    11: astore_0
    12: aload_1
    13: athrow

  LocalVariableTable:
    Start  Length  Slot  Name   Signature
        0      10     0     s   Ljava/lang/String;

表中仅显示了一个局部变量,其中使用了 3 个局部变量(0、1、2 校验字节码loadstore指令)。有对此的解释吗?是否忽略值为 null(最终值)的局部变量?

4

0 回答 0