下面是一些示例代码来说明我们的问题:
A a = null;
try {
a = new A();
a = doSomethingThatWillThrowAnException();
} finally {
System.out.println("A = " + a);
}
问题是finally块中打印的'a'的值是什么......
我不确定,我想我偶然发现了一些可能无法完全描述的东西。我在笔记本电脑(x86 上的 jdk1.6.0.16)上观察到“a”等于 A()。但是,对于 Solaris 上的 JDK 1.4,我认为该值为 null(就像即使抛出异常也执行了赋值一样)。这显然与错误有关,我们将部署一个没有分配的版本只是为了确保但我们想知道你们中的一个人是否也注意到了这一点或有某种解释要提出。
我们还将做一个示例程序来在有问题的 JDK 上演示这一点……我们将发布结果。