<p><pre><code> class Test {
public int foo;
public Test aaa() {
Test x = new Test();
x.foo = 1;
try {
return x;
} catch (Exception e) {
} finally {
++x.foo;
}
return x;
}
public static void main(String[] args) {
Test t = new Test();
Test y = t.aaa();
System.out.println(y.foo);
}
}
</code></pre>
As before, the 'finally' clause runs after the return statement has been executed. That's clear, but does it affect the returned object?<p>C# has value types (and Java is scheduled to get them), so it has a third variant of this code.<p>Given the subtleties involved, I think a language should forbid this construct. However, I'm not sure that can be checked at compile time if the compiler has insudffient information about aliasing.